Perl で Gmail の SMTP からメールを送る、「安全性の低いアプリの許可」設定とFromヘッダの設定

Perl でメール送信プログラムを作る。
GmailSMTP を使います。

use Email::Simple;
use Email::Sender::Simple qw/sendmail/;
use Email::Sender::Transport::SMTP::TLS;
use Encode;

my $sender = Email::Sender::Transport::SMTP::TLS->new(
    host     => 'smtp.gmail.com',
    port     => 587,
    username => 'myaccount@mydomain.com',
    password => 'password',
);

my $email = Email::Simple->create(
    header => [
        From    => '"サポートデスク" <support@mydomain.com>',
        To      => $mailto,
        Subject => encode('MIME-Header-ISO_2022_JP', 'メールのタイトル'),
    ],
    attributes => {
        content_type => 'text/plain',
        charset      => 'ISO-2022-JP',
        encoding     => '7bit',
    },
    body => $body, # メール本文
);

sendmail($email, {transport => $sender});

ここまでは意外とあっさりできた。

以下、ハマったところ。

安全性の低いアプリの許可を有効にする

このやり方では、GoogleAppsアカウントのメールアドレスとパスワードをソースコードに書かねばならない。さすがに自分のアカウントを使用することはできないので、新規にアカウントを発行した。

しかし、新規アカウントでやってみると「Auth failed: 534 5.7.14」というエラーが出て全くうまくいかない。

調べてみたところ、Googleアカウントの設定が必要らしい。

  • 新規で作成したアカウントでGoogleAppsにログイン → 右上のメールアドレス → アカウント → ログインとセキュリティ → 安全性の低いアプリの許可

で、安全性の低いアプリの許可を「有効」にする。

送信元メールアドレスをFromに設定できるようにする

安全性の低いアプリの許可を有効してメールは送れるようになった、めでたしめでたし、と思ったら、よく見るとFromのメールアドレスが新規作成アカウントのメールアドレスに書き換わっている。

Perl上で新規作成アカウントとは別のメールアドレス(今回はサポート用のメールアドレス)をFromに記載しているのに、メールを受信するとFromヘッダが勝手に書き換えられてしまう。
自分のアカウントを使ってテストしているときはできたのに。。。

Gmailで設定の差異を探すこと15分、Gmail上でFromに設定できるメールアドレスでないとダメなことが判明。

  • Gmail → 設定 → アカウント → 名前 → メールアドレスを追加

で、サポート用のメールアドレスをFromに設定できるようにする。
自分のアカウントではこの設定をしていたのでうまくいってたわけですね。


これでようやく、サポート用のメールアドレスをFromヘッダに設定して、メール送信できるようになりました。めでたしめでたし!


参考:
Perlでgmailからメール送る - XXXannex
email - how to fix "send-mail: Authorization failed 534 5.7.14 " - Server Fault