Gmailのメールアドレスとアプリパスワードというパスワードを用いて、Gmail経由でメールを送る方法になります。
事前の設定として、Googleアカウント側の設定を行うだけでよいので、Gmail経由でメールを送る方法としては簡単な方法になります。
Googleアカウント側の設定
PerlでGmail経由でメールを送るため、まず、Googleアカウント側の設定を行う必要があります。
Googleアカウント側の設定を行うことでGmailにアクセスするため、アプリパスワードを取得します。
ここではその方法を簡単に説明します。
- Googleアカウントで「セキュリティ」タブから2段階認証の設定を行います。
- 2段階認証の設定が完了したら、同様に「セキュリティ」タブの「2段階認証プロセス」のページに移動します。
- 下の方に「アプリパスワード」があるので、そこでアプリパスワードの設定を行います。
- 生成するデバイスでその他を選択し、任意の名前を付けて、アプリパスワードを取得します。
補足として、この選択はアプリをカレンダーとかにして、Windowsパソコンを選んでも、結局フルアクセス権を得ることができ、メールを送ることができたので、もしかしたら選択に意味はないかもしれません。
アプリパスワードを設定して、取得できたら作業は終了になります。
Gmail経由でメール送信を行うPerlプログラム
Gmail経由でメール送信を行うPerlプログラムは以下のようになります。
mail.pl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/usr/bin/perl -w use Net::SMTP; $pass = 'random_password'; $smtp = Net::SMTP->new('smtp.gmail.com', Port => 587, Timeout => 30, Debug => 1, ); $smtp->starttls(); $smtp->auth($user, $pass); $smtp->mail($sender); $smtp->to($receiver); $smtp->data(); while(<>){ $smtp->datasend($_); } $smtp->dataend(); $smtp->quit; |
このプログラムは標準入力からヘッダー行を含むメールの内容を受け取り、Gmailを経由してメール送信を行うことができます。
このプログラムのパラメータとして、$user, $pass, $sender, $receiverの4つのパラメータが必要になります。
それぞれのパラメータは
$user: googleアカウント(末尾が@gmail.comになるでしょう)
$pass: 事前の設定で取得したアプリパスワード
$sender: 送信者($userと同様にしても良いかもしれません)
$receiver: 宛先
になります。
プログラムを単純にするためにアプリパスワードが組み込まれているので、アプリパスワードを入れたプログラムは他のユーザーに見られないようにしたほうが良いです。
また、アプリパスワードを別ファイルにし、そのファイルの方を他のユーザーから見られないようにし、そのファイルを読み込んでパラメータに入力しても良いでしょう。
このプログラムはプログラムを単純にするためにエラー処理が一切入っていません。エラー処理を行う方法は様々な方法がありますが、例えば
1 |
die 'Authentication error' unless $smtp->auth($user, $pass); |
のようにそれぞれの文を処理することでエラー処理を行うことができます。ただ、上記の文だとエラー文の方に注目が行く気がするので、
1 |
check_func($smtp->auth($user, $pass), 'error_message'); |
のような関数を作ってもいいかもしれません。
このプログラムはNet::SMTP->newでDebug機能がONになっているので、必要がなければ、Debugを0にしてDebug機能をOFFにしてください。
メールのテスト
簡単なメールのテストとしてSenderとReceiverを自分自身に設定して試してみるとよいでしょう。
プログラムは標準入力からメールのヘッダー行と本文を入力することで利用できます。
content.txt
1 2 3 |
Subject: test message mail test |
コマンド例
1 |
perl mail.pl < content.txt |
でメールを送信できます。
また、別の方法として、本文の内容にsedコマンドでヘッダー行を追加して
1 |
echo "mail test" | sed "1i Subject: test message\n" | perl mail.pl |
のようにして、1行でメールを送信することもできます。
最後に、Gmailでメールが届いたかどうかを確認にしたらメールのテストは完了で良いでしょう。
参考
Net::SMTP - Simple Mail Transfer Protocol Client - Perldoc Browser