忘れっぽい自分のために覚書(笑)-sendmail から NetSMTP へ
12日の日記に書いた
「受信拒否されたメール」のその後。
あの時、拒否されたのは
arcor.deのメールアドレス宛のメールだったんだけど、
こうやって拒否するIPをリスト化しているのは
arcor.deではなくて「SORBS」なる
プロジェクトらしい。
つまり、このSORBSのリストを、
他のプロバイダーも利用してるかもしれないので
今後、どのメールアドレスに送ったら
同じ現象(受信拒否)が起こるのか、わからんという事。
うーん、こりゃ、拒否されないで済むIPで
メールを送信するプログラムを組まないとアカンな。
っつー訳で。
sendmailを呼んで、メールを送信するという
典型的(?)な方法でやってたんだけど、
そうすると、今回拒否されちゃった
問題のサーバーのIP経由でメールが送られてしまうので、
Net::SMTP モジュールを使って
SMTPサーバー経由でメールを送信する事にしました。
が、SMTPサーバーのIPは、SORBSで調べてみると
どうやら拒否されないIPらしいので
楽勝と思ったら、意外に梃子摺ってですね。
何度やっても、SMTPサーバーが
メールを送信してくれないので、
何が問題かと思ったら、
どうやらPOP before SMTPになっている模様。
メーラーで送信する時には
POP before SMTPやSMTP認証の設定をしなくても
送信できるのに、なんでperlから呼ぶとダメなんだ?
訳わかんないなぁ…はぁ。
仕方ないので、単純に Net::POP3 で
一度POPサーバーにログインしてから
SMTPサーバーにアクセスしたら
今度はうまく送信できるようになりました(^-^)/
わーい、わーい。
Net::SMTPのサンプル
#!/usr/bin/perl --
use Net::POP3 ;
use Net::SMTP ;
local $MAIL = {
'SERVER'=>'SMTP_server' ,
'ID'=>'your_id' ,
'PASS'=>'your_password' ,
'FROM'=>'your_address' ,
'TO'=>'recipients_address'
} ;
$MAIL->{BODY} =<<_EOT_ ;
To: $MAIL->{TO}
From: $MAIL->{FROM}
Subject: test
your message
_EOT_
&popBeforeSmtp() ;
&sendmail() ;
exit() ;
sub sendmail {
$MAIL->{SERVER} ,
Hello => $MAIL->{SERVER} ,
Timeout => 60 ) ;
die "SMTPサーバーに接続できないよ\n" unless $SMTP;
$SMTP->mail( $MAIL-{FROM} ) ;
$SMTP->to( $MAIL->{TO} ) ;
$SMTP->data() ;
$SMTP->datasend( "$MAIL->{BODY}\n" ) ;
$SMTP->dataend() ;
$SMTP->quit ;
}
sub popBeforeSmtp() {
my $POP = Net::POP3->new( $MAIL->{SERVER} ) ;
die "POPサーバーに接続できへんで\n" unless $POP ;
$POP->login( $MAIL->{ID} , $MAIL->{PASS} ) ;
die "IDかパスワードが違うんじゃない?\n" unless $POP ;
$POP->quit ;
}