2

gmail の smtp サーバーを使用してメールを送信するための perl スクリプトを作成しました: smtp.gmail.com -

use Net::SMTP;

my $smtp = Net::SMTP->new('smtp.gmail.com',
                    Port=> 587,
                    Timeout => 20,
                    Hello=>'user@gmail.com'
                    );
print $smtp->domain,"\n";
$sender = "user@gmail.com";
$password = "mypassword";
$smtp->auth ( $sender, $password ) or die "could not authenticate\n";
$receiver = "user@gmail.com";

$subject = "my custom subject";
$smtp->mail($sender);
$smtp->to($receiver);
$smtp->data();
$smtp->datasend("To: <$reciever> \n");
$smtp->datasend("From: <$sender> \n");
$smtp->datasend("Content-Type: text/html \n");
$smtp->datasend("Subject: $subject");
$smtp->datasend("\n");
$smtp->datasend('the body of the email');
$smtp->dataend();
$smtp->quit();
print "done\n\n";

「user」には Gmail のユーザー名があり、「mypassword」にはパスワードがあります。しかし、このコードを実行すると、認証自体で停止し、認証できませんでした。

'mx.google.com' as the result of :
print $smtp->domain,"\n";を取得すると、Google の smtp サーバーに接続できます。

私が間違っているのは何ですか?助けてください。

4

2 に答える 2

3
use Net::SMTP;
my $smtp = Net::SMTP->new ....

gmail経由で送信するには、暗号化された接続を使用する必要があります.Net ::SMTP::TLSまたは Net::SMTP::SSL(ポート465を使用)を使用してください。

Hello=>'user@gmail.com'

「こんにちは」はメールアドレスではありません。代わりにホスト名を入力してください

$sender = "user@gmail.com";
...
$receiver = "user@gmail.com";

これらを一重引用符で囲みます

それでも「認証できませんでした」というメッセージが表示される場合。モジュールMIME::Base64Authen::SASLがインストールされていることを確認してください。

 $smtp->datasend("To: <$reciever> \n");

$receiverではなく、$ receiver である必要があります

于 2012-06-13T07:27:36.123 に答える
0

Gmail はポート 587 で TLS/STARTTLS を使用し、ポート 465 で SSL を使用します。Perl から Google SMTP 経由でメールを送信するに従ってください。または、 Email::Send::SMTP::Gmail を使用できます。より使いやすく、より多くの機能を備えているため、これをお勧めします。

于 2012-06-13T08:04:01.823 に答える