2

接続にユーザー+SSL認証を必要とするSMTPメールサーバーを使用しています。メールサーバーに接続してメールを送信するためのperlモジュールを探していますが、何も役に立ちません。

perlモジュールまたはperlコードに関する提案をいただければ幸いです。

編集

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

エラー:

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

コード:

#!/usr/bin/perl

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

my %mail = (
From=> 'user1@server.com',
To=> 'user2@server.com',
# 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;
4

5 に答える 5

2

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

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

ユーザー'username'(実際のコード'user@mail.com'?)とパスワード'password'はmail.server.comで知られていますか?

そうでない場合は、User unknownエラーが発生する可能性があります。


EDIT1 私はちょうどあなたがそのメールに「To」を持っていないのを見ました、「ccだけ」、あなたのメールサーバーはそれを好まないかもしれません(私は気にしませんでした、それで:-)、またはトリミングでそれを「起こりました」コード?


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

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

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

メッセージを送信するには、メール送信者に有効なアドレスを指定する必要があります。既存のアドレスを指定したとき(Cc=>'user2@server.com'行..それは機能しました!

于 2010-04-12T20:52:22.167 に答える
0

発生するエラーは、認証エラーではなく、RCPTTOエラーです。これは、実際に存在しないユーザーにメールを送信しようとしたか、認証せずにサーバーを介して中継しようとしたことが原因である可能性があります。

Mail::SendmailがSMTPAuthMethod( http://metacpan.org/pod/Mail::Sendmail#LIMITATIONS)をサポートしていないように思われる場合は、認証が試行されていない可能性があります。

インスタンスを作成した直後に、Net :: SMTP:SSLのauthメソッドを使用する必要があります。

$mail{Smtp}->auth('username','password');
于 2010-04-13T10:16:54.530 に答える
0

たぶん、SSL認証を介して接続するためのNet :: SMTP::SSLと添付ファイルサポートのためのNet::SMTP :: Multipartを試して、それらを一緒に機能させるために何かをすることができます。

于 2010-04-06T10:15:17.053 に答える
0

search.cpan.org「SMTP」や「SSL」などの用語でそのようなものを探す必要があります。最初のヒットはですNet::SMTP::SSL。これは、標準のドロップイン置換としてそれ自体を説明しますNet::SMTP。それは非常に関連性があるように聞こえます。それはあなたが望むことをしますか?

于 2010-04-06T10:15:43.083 に答える
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 ('myuserid@comcast.net');

# Email to
$smtp->to ('anyuser@gmail.com');

$smtp->data();

$smtp->datasend("To: anyuser@gmail.com\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;
于 2013-04-02T10:40:09.047 に答える