添付ファイルを持つユーザーとSSL認証と送信メールとのSMTP接続のためのPerlを使用する方法

StackOverflow https://stackoverflow.com/questions/2583987

  •  24-09-2019
  •  | 
  •  

質問

私は、ユーザー+接続用のSSL認証が必要なSMTPメールサーバーを使用しています。私は、メールサーバーに接続してメールを送信するためのPerlモジュールを探していますが、役に立つものを見つけていません。

のPerlモジュールまたは任意のPerlコードのための任意の提案が本当に理解されるだろう。

EDIT

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

エラー:

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;
役に立ちましたか?

解決

私はあなたがこの行のデータを検証したと仮定します:

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

で知られている

ユーザーは 'ユーザ名'(あなたのreallifeコードの 'user@mail.com'?)パスワードを使用して、 'パスワード' ない場合は、

、私はUser unknownエラーが期待されます。

<時間>

EDIT1 のの あなたがそのメールでno「に」を持っていることを私はちょうどのこぎり、「唯一の」CCは、メールサーバーは、そのように(私は:-)それでは、気にしなかったではないかもしれない、またはそれをダウントリミングで「起こる」でしたコード?

<時間>

EDIT2 のの 私はラインを交換することにより、あなたのエラーを再現することができました。

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

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

あなたはmailsererににメッセージを送信するための有効なアドレスを与える必要があります!私はアドレスに既存の(Cc=>'user2@server.com'ラインを供給すると...それは働いた!

他のヒント

あなたは、このような「SMTP」と「SSL」などの用語でsearch.cpan.orgで、このようなものを探してください。最初のヒットは、ドロップイン標準Net::SMTP::SSLの代替としての地位を説明Net::SMTP、です。音は非常に多くの関連います。それはあなたがやりたいのでしょうか?

たぶん、あなたは、添付ファイルをサポートするためにSSL認証およびネット:: SMTP ::マルチパートの上に接続するための:: SSLをネット:: SMTPを試してみて、それらを一緒に動作させるために何かを行うことができます。

私は自動化されたメッセージを変更する必要がありましたので、コムキャストは、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;
あなたが得るエラーは、RCPT TOエラーではない認証エラーです。あなたが実際に存在しないユーザーまたはあなたが認証なしでサーバーを介して中継することを試みたので、メールを送信しようとしたので、これは可能性があります。

もし、メールのように思える:: Sendmailは(SMTP認証方式をサポートしていません http://metacpan.org/pod/Mail::Sendmail#LIMITATIONSする)その最も可能性の高い認証も試みなかった。

あなたはそれのインスタンスを作成した後、SSLの右:

あなたはネット:: SMTPの認証方法を使用する必要があります。

$mail{Smtp}->auth('username','password');
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top