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'} = 'お客様メールアドレスのドメイン';


いいなと思ったら応援しよう!