さくらからNet::SMTPでヤフーに添付メールを飛ばす
メールは確かに飛びますので 構文は正しいと思います。
ただし SMTPを叩くせいか 連続して送信ができません。
DOS攻撃に備えて さくらのサーバーが
同じIPアドレスから連続送信できないようになっているのか???不明
フォームは 以前のものを 丸ごと使います。
POP before SMTPというのに さくらのメールサーバーが対応しています
SMTP自体に 認証機能が無いので
use Net::POP3;(コアモジュールです)
さきに POPで サーバーに
$pop = Net::POP3->new('メールホスト名');
POPメールサーバー名と POPメールサーバーのパスワードを送ります。
フォームから データを受け取って メールするcgiです
mail777.cgiとします
#!/usr/bin/perl #さくらレンタルサーバーのPerlのパス use utf8; use CGI; use Encode; use MIME::Base64; use File::Basename; use Net::SMTP; use Net::POP3; my $q = CGI->new(); $name= $q->param('name'); $email= $q->param('email'); $subject= $q->param('subject'); $comments= $q->param('comments'); $mailto='trinity777@yahow.co.jp'; #あなたのヤフーメルアド my $mailhost ='なんとかかんとか.sakura.ne.jp'; #あなたの契約のホスト名 # ファイルネーム取得 my $filename = $q->param('uploaded_file'); # ファイルシステムの設定(デフォルト:Unix) fileparse_set_fstype('MSWin32'); my $basename= basename($filename,""); # ファイルハンドル取得 my $fh = $q->upload('uploaded_file'); # バイナリデータとして読み込む binmode $fh; my $data =''; while (read $fh,$buf,60*57){$data.=$buf;} close $fh; #バイナリデータをBASE64することでメール添付するためのASCIIテキストにする $base64filebody = encode_base64($data,''); #本文を出力する前に$base64filebodyの改行を\nに置換 #Windowsの改行コードは\r\nでMacの改行コードは\rですから全て\nに置換 $base64filebody=~ s/\r\n/\n/g; $base64filebody=~ s/\r/\n/g; # 汚染チェックとして改行を取り除く $name=~ s/\r|\n//g; $email=~ s/\r|\n//g; $subject=~ s/\r|\n//g; $comments=~ s/\r|\n//g; my $bound='wq5se3d1ew'; $mail_name= encode('MIME-Header-ISO_2022_JP',$name); $mail_subject=encode('MIME-Header-ISO_2022_JP',$subject); $mail_comments=encode('ISO_2022_JP', decode('utf-8', $comments)); $mail_filename=encode('MIME-Header-ISO_2022_JP',$basename); #POPします $pop3= Net::POP3->new($mailhost) or die "error!!\n"; $pop3->login("メールサーバー名","メールサーバーパスワード"); $pop3->quit(); #SMTPします my $smtp = Net::SMTP->new($mailhost) or die "error!!\n"; $smtp->mail($email); #フォームで入力されたメルアドにする $mail_email=encode('MIME-Header-ISO_2022_JP',$email); $smtp->to($mailto); #ヤフーに設定したのでヤフーにいきます $mail_to=encode('MIME-Header-ISO_2022_JP',$mailto); $smtp->data(); $smtp->datasend("MIME-Version: 1.0\n"); $smtp->datasend("Content-Type: Multipart/Mixed; boundary=$bound\n"); $smtp->datasend("Content-Transfer-Encoding: base64\n"); $smtp->datasend("From: $mail_email\n"); $smtp->datasend("To: $mail_to\n"); $smtp->datasend("Subject:$mail_subject\n"); $smtp->datasend("--$bound\n"); $smtp->datasend("Content-Type: text/plain; charset=ISO-2022-JP\n"); $smtp->datasend("\n"); $smtp->datasend("$mail_comments\n"); $smtp->datasend("--$bound\n"); $smtp->datasend("Content-Type: application/octet-stream; name=$filename\n"); $smtp->datasend("Content-Transfer-Encoding: base64\n"); $smtp->datasend("Content-Disposition: attachment; filename=$mail_filename\n"); $smtp->datasend("\n"); $smtp->datasend("$base64filebody\n"); $smtp->datasend("--$bound--\n"); $smtp->dataend(); $smtp->quit; print $q->header(-charset => 'utf-8'), $q->start_html('Mail Form'), $q->h1('settings in this form'), $q->p('メールを送信しました。'), $q->end_html;