0

私は現在、一般的な件名と内容を含む正しい電子メール アドレスに電子メールを送信する動作中の Perl コードを持っています。

ただし、現在、新しいユーザーが開始するたびに、事前に作成された .oft テンプレートを起動して、ユーザーが知る必要があることをすべて伝えています。.oft はサーバーに保存されます。perl コードを変更して to: が必要になるように変更する方法はあるのでしょうか?

だから基本的に

    $smtp = Net::SMTP->new('smtp.blah');
    $smtp->('no-replay@blah.com');
    $smtp->to('$personEmail');
    $smtp->data();
    $smtp->datasend($locationOfOftTemplate);
    $smtp->dataend();
    $smtp->quit;
4

1 に答える 1

0

私の知る限り、この独自の形式を処理するためのモジュールはありません。代わりに、標準のテンプレート システムに変換します。

my $template = <<'TEMPLATE';
Good morning, [% name %]!

Today is your first day at work. You have already received your universal login
credentials:

    [% ldap_user %]
    [% ldap_pass %]

It works for authenticating at the Web proxy, mail system, Jabber and internal
services. Change the password ASAP: <[% ldap_web %]>

-- 
Yours sincerely, the greeting daemon
TEMPLATE

use Text::Xslate qw();
my $text = Text::Xslate->new(syntax => 'TTerse')->render_string($template, {
    name => 'New Bee',
    ldap_user => 'nbee',
    ldap_pass => 'CON-GLOM-O',
    ldap_web => 'http://192.168.0.1:8080/',
});

MIME ツールキットを使用して電子メールを作成します。HTML/マルチパート/添付ファイルは Courriel::Builderで簡単です:

use Courriel::Builder;

my $email = build_email(
    subject('Welcome'),
    from('no-reply@example.com'),
    to('…'),
    plain_body($text),
);

最後に、高度なライブラリEmail::Senderを使用して送信します。これにより、優れたエラー チェックが提供され、トランスポートを簡単に切り替えることができます。テストのためにローカル配信を実行します。

use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTP qw();
use Try::Tiny;

try {
    sendmail(
        $email,
        {
            transport => Email::Sender::Transport::SMTP->new({
                host => 'smtp.example.invalid',
            })
        }
    );
} catch {
    warn "sending failed: $_";
};
于 2013-07-12T07:17:24.880 に答える