2


2

ユーザーとSSL認証を使用したSMTP接続にperlを使用し、添付ファイル付きのメールを送信する方法

接続にユーザー+ ssl認証を必要とするSMTPメールサーバーを使用しています。 メールサーバーに接続してメールを送信するためのperlモジュールを探していますが、有用なものは見つかりませんでした。

perlモジュールまたはperlコードの提案は本当にありがたいです。

EDIT

Mail

SendmailおよびNet :: SMTP :: SSLを使用して、sendmailサーバーに接続してメールを送信しようとしました。 以下にサンプルコードを示しますが、エラーユーザーは不明です。

エラー:

mail: Net::SMTP::SSL=GLOB(0x9599850) not found
RCPT TO: error (550 5.1.1 ... User unknown).

コード:

#!/usr/bin/perl

use strict;
use warnings;
use Mail::Sendmail;
use Net::SMTP::SSL;

my %mail = (
From=> '[email protected]',
To=> '[email protected]',
# Cc will appear in the header. (Bcc will not)
Subject => 'Test message',
'X-Mailer' => "Mail::Sendmail version $Mail::Sendmail::VERSION",
);

$mail{Smtp} = Net::SMTP::SSL->new("mail.server.com", Port=> 465, Debug=>1);
$mail{auth} = {user=>'username', password=>"password", required=>1 };
$mail{'X-custom'} = 'My custom additionnal header';
$mail{Message} = "The message key looks terrible, but works.";
# cheat on the date:
$mail{Date} = Mail::Sendmail::time_to_date( time() - 86400 );
if (sendmail %mail) { print "Mail sent OK.\n" }
else { print "Error sending mail: $Mail::Sendmail::error \n" }

print "\n\$Mail::Sendmail::log says:\n", $Mail::Sendmail::log;

5 Answer


2


この行のデータを確認したと仮定します。

$mail{auth} = {user=>'username', password=>"password", required=>1 };

mail.server.comで知られているパスワード「password」を持つユーザー「username」(実際のコード「[email protected]」ですか?)ですか?

そうでない場合、「ユーザー不明」エラーが発生します。

'' '' '

  • EDIT1 *そのメールに「To」がなく、「cc」のみがあり、メールサーバーがそれを気に入らないかもしれない(私は気にしなかったので、:-)か、コードをトリミングしますか?

'' '' '

  • EDIT2 *行を置き換えることでエラーを再現できました

$mail{Smtp} = Net::SMTP::SSL->new("mail.server.com", Port=> 465);

with

$mail{Smtp} = Net::SMTP::SSL->new("smtp.mail.com", Port=> 465);

メール送信者にメッセージを送信するための有効なアドレスを与える必要があります! 既存の宛先アドレス( `Cc ⇒ 'user2 @ server.com'`行.. 出来た!


0


Net

SMTP :: SSLでSSL認証を介して接続し、Net :: SMTP :: Multipartで添付ファイルをサポートして、それらを連携させることができます。


0


「search.cpan.org」で「SMTP」や「SSL」などの用語でそのようなものを探す必要があります。 最初のヒットは `Net

SMTP :: SSL`で、これは標準の` Net :: SMTP`のドロップイン置換として自身を説明しています。 それは非常に関連性が高いと思われます。それはあなたが望むことをしますか?


0


表示されるエラーは、認証エラーではなくRCPT TOエラーです。 これは、実際に存在しないユーザーにメールを送信しようとしたか、認証なしでサーバーを中継しようとしたためです。

Mail

SendmailがSMTP Authメソッド(http://metacpan.org/pod/Mail::Sendmail#LIMITATIONS)をサポートしていないように思われる場合は、ほとんどの場合認証も試行されていません。

インスタンスを作成した直後に、Net

SMTP:SSLのauthメソッドを使用する必要があります。

$mail{Smtp}->auth('username','password');


0


ComcastはSSMTPに移行したため、自動メッセージを変更する必要がありました。

以下に、Comcastメールサーバーの動作するPERLコードを示します。 あなたがそれが役に立つことを願っています。

#!/usr/bin/perl

use Net::SMTP::SSL;
use MIME::Base64;


$uptime = `uptime`;

$smtp = Net::SMTP::SSL->new
        (
        "smtp.comcast.net",
        Hello => myhost.comcast.net,
        Port => 465,
        Timeout => 30,
        Debug => 0,
        );
$smtp->datasend ("AUTH LOGIN\n");
$smtp->response();

# Mailbox info
$smtp->datasend (encode_base64('myuserid')); #username
$smtp->response();
$smtp->datasend (encode_base64('mypassword')); # password
$smtp->response();

# Email from
$smtp->mail ('[email protected]');

# Email to
$smtp->to ('[email protected]');

$smtp->data();

$smtp->datasend("To: [email protected]\n");
$smtp->datasend("From: myuserid\@comcast.net\n");
$smtp->datasend("Subject: My Subject Line");

# Line break to separate headers from body
$smtp->datasend("\n");


$smtp->datasend("Uptime Report - At $uptime\n");
$smtp->dataend();

$smtp->quit();

exit;