使っていない部分もありますが...。2006年1月以来更新が止まっていて,2016年時点ではすでに非推奨になっている。いうのを書いたので,そちらも参照してみて欲しい。はまるというのを書いた。そちらも参考にしてみて欲しい。FreeBSD上でPerlのスクリプトを使ってプロバイダの認証あり587番ポートからメールを送信する,という話を書いた。今回,似たようなことをしたので,それを記録に残しておこうと思う。やった作戦は何かというと,Gmail(Googleのmail)のSMTPとPerlのスクリプトを組み合わせて,googleのアカウントからメールを送る,という作戦。なんでこんな作戦をしたくなったかというと,同窓会関係のメールの一斉送信のため。個人的に高校の同期の同窓会のサイトを作っているのだが,そのメンバーに一斉にメールをしたいことがあるのだが,メールする先はPCだったり携帯だったりする。フィールドにアドレスを100以上並べて送信したのだが,この間その方法で送信すると,携帯で受け取った人から「文字化けで全然あかん」というお叱りを多数受け取った。そのうちPCで受け取った友人からも文字化けを指摘された。見てみると,携帯によってはBcc:フィールドを他の目的で使うことがあるみたい。Bcc:フィールドを長くするとトラブルを生じるみたい。文字コードをデフォルトに設定していると,変な文字があるといつものISO-2022-JPではない文字コードにされてしまうみたい。そのため,ひどい文字化けが起こったようである。そこで,いろいろ作戦を考えてみた。Perlのスクリプトを使って,うちのプロバイダのSMTPからメールを送信するのは以前やったので,それを使うという作戦。これは送信元がうちのアドレスになり,私一人で使ってるアドレスではないので,ちょっと難がある。制限はないかも...)そこから送信させる,など。どれもいまいちだった。そこでいろいろ調べているうち,gmailもsmtpで送信できる,というのを思い出した。smtp」で検索してみると,ちゃんとgoogleのヘルプページがひっかかった。(username@gmail.com)」,・パスワードは「Gmailのパスワード」,を使えば使えるみたい。これなら,以前の投稿で書いたNet::SMTP::TLSとJcode.pmを使えば簡単に実現できそう。いうことで挑戦してみた。'NO',」という行を削除したぐらい。後は,subjectや本文,アドレスリストを別ファイルで用意しておいて,読み込ませるようにしておいた。以下に,ソースコードを載せておこう。ちなみにプロのPerl使いとは違って,ちょっとどんくさい感じであるが,その点はご容赦願いたい。ここでは,subjectは同じディレクトリのsubjectという名前のファイルにテキストでいれている。subjectは短い方がよく,1行に収めないといけない(1行しか読み込んでない)。アドレスリストは同じく同じディレクトリにmaillistというファイル名のテキストファイルで用意する。これは1行に1アドレスのみとしている。s/MMMM0MMMM/$name/;」という行はそのためにある。本文は同じディレクトリにmessageという名前のテキストファイルを用意しておく。このスクリプトでは,短時間に大量に送信してスパム発信者と思われても困るので,メール送信とメール送信の間に7~17秒の間を置いている。この時間間隔でいいのか,あるいは長すぎるのか,は不明だが,一応100個程度のメールは送信はできた。短くてもいいかなぁ?という印象だが...また,「GetTimeStr」,「GetDateStr」,「ZeroPadding」というサブルーチンはそれぞれ,時刻文字列,日付文字列,一桁の数字の前にゼロを加える,というルーチンである。'".$to_mail."'宛の送信を開始しました。'".$to_mail."'宛への送信が終了しました。名宛にメールを送信しました。$dum;}上記のスクリプトを使う場合,maillistはテスト用を含めて複数用意しておいて,適宜maillistにコピーして使うと便利である。subjectやmessageは,subject.20100701のようにコピーしておくと,何を送ったかがわかってよいかもしれない。このスクリプトを使って送信すると,gmailのアカウントの送信メールにずらっと送信した履歴が残る。残ってもいまいちなので,一斉にうまく消す方法を今模索しているところである。script内で「<」と「>」をそのまま入力したら,htmlのタグと認識されてしまっていた。