MailformPro4.2.8+WebARENAでSMTP送信
お客様のお問合せフォームを実装する時、MailformPro4.2.8+WebARENAのSMTPを採用しています。
主要な設定は下記の通りです。
※お客様のWebARENAはTLSをサポートしていないため、465を通してSMTP over SSLで通信します。
ファイル:mailformpro\config.cgi
...
# sendmailを利用しない
#$config{'sendmail'} = '/usr/sbin/sendmail';
...
# SMTPSを有効
push @Modules,'SMTPS'; ## SMTPS送信
ファイル:mailformpro\configs/SMTPS.cgi
## SMTPS Server
$config{'SMTPserver'} = 'WebARENAのSMTPサーバードメイン';
## SMTPS Auth
$config{'SMTPuser'} = 'アカウント';
$config{'SMTPpasswd'} = 'パスワード';
## SMTPS Port
$config{'SMTPport'} = '465';
1;
テストしてみたら、「mailformpro 502 5.5.1 Error: command not implemented」のエラーが発生しました。
mailformpro\librarys\SMTPS\initialize.cgiにはデフォルトでTLSで通信しているため、接続する時、「$me->_command("STARTTLS");」のコマンドを発行します。WebARENA側、対応していないため、エラーになりました。
use Net::SMTP::TLS;
…
$SMTP = Net::SMTP::TLS->new(
$config{'SMTPserver'},
Port => $config{'SMTPport'},
User => $config{'SMTPuser'},
Password => $config{'SMTPpasswd'}
) || die "Connect failed over tls";
Net::SMTP::SSLに変更したかったですが。Net::SMTP::SSLのドキュメントを確認してみたら、Net::SMTPが既にSMTP over SSLをサポートしていることを分かりました。
Since Net::SMTP v1.28 (2014-10-08), Net::SMTP itself has support for SMTP over SSL, and also for STARTTLS. Use Net::SMTP, not Net::SMTP::SSL.
mailformpro\librarys\SMTPS\initialize.cgiを下記のように修正して、すぐ解決できました。
use lib "librarys/SMTPS/lib";
use Net::SMTP;
sub _SENDMAIL {
my($to,$from,$name,$subject,$body,$attached,$htmlmail) = @_;
my($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
@month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$smtpdate = sprintf("%s, %d %s %04d %02d:%02d:%02d +0900 (JST)",$week[$wday],$mday,$month[$mon],$year+1900,$hour,$min,$sec);
$SMTP = Net::SMTP->new(
$config{'SMTPserver'},
Hello => $config{'SMTPserver_domain'},
Timeout => 30,
SSL => 1
) || die "Connect failed over tls";
$SMTP->mail($from);
$SMTP->to($to);
$SMTP->data();
$SMTP->datasend("Date: ${smtpdate}\n");
$SMTP->datasend(&_MAILHEADER($to,$from,$name,$subject,$body,$attached,$htmlmail));
$SMTP->dataend();
$SMTP->quit;
}
1;
一点注意してい欲しいのは:
WebARENAのSMTPサーバードメインと「Hello」時のドメインが違うため、
mailformpro\configs\SMTPS.cgiに下記の設定を追加するのは必要です。
$config{'SMTPserver_domain'} = 'お客様メールアドレスのドメイン';