Hatena::ブログ(Diary)

memo.mzt このページをアンテナに追加 RSSフィード Twitter

2008/02/19

GmailのSMTPを利用してPerlからメール送信(添付ファイル付)

さて、前稿モジュールの準備ができたのでPerlからGmail経由で添付ファイルを送る。

#!/usr/bin/perl

use lib '/home/xxxxxxxx/local/lib/perl5';
use Jcode;
use Net::SMTP;
use Net::SMTP::SSL;
use MIME::Entity;

my $smtp_server = 'smtp.gmail.com';
my $smtp_port = '465';
my $smtp_acc = 'gmail@example.com';
my $smtp_pwd = 'password';

my $mail_to = 'to@example.com';
my $mail_bcc = 'bcc@example.com';
my $mail_from = 'from@example.com';
my $mail_subject = '件名ですよ';
my $mail_body = <<"_MAILBODY_";
本文ですよ
_MAILBODY_

$mail_subject = jcode($mail_subject)->jis;
$mail_subject = jcode($mail_subject)->mime_encode;
$mail_to = jcode($mail_to)->jis;
$mail_to = jcode($mail_to)->mime_encode;
$mail_bcc = jcode($mail_bcc)->jis;
$mail_bcc = jcode($mail_bcc)->mime_encode;
$mail_from = jcode($mail_from)->jis;
$mail_from = jcode($mail_from)->mime_encode;
$mail_body = jcode($mail_body)->jis;

my $err;
my $oSmtp;
my $oMime;

$oSmtp = Net::SMTP::SSL->new($smtp_server,Port => $smtp_port, Debug => 1);

if($oSmtp->auth($smtp_acc,$smtp_pwd)){
  $oSmtp->mail($mail_from);
  $oSmtp->to($mail_to);
  $oSmtp->bcc($mail_bcc);
  $oSmtp->data();
  $oMime = MIME::Entity->build(
    From     => $mail_from,
    To       => $mail_to,
    Bcc      => $mail_bcc,
    Subject  => $mail_subject,
    Data     => $mail_body);
  $oMime->attach(
    Path     => '/home/xxxxxxxx/hogefuga.csv',
    Type     => "application/octet-stream",
    Encoding => "Base64"
  );
  $oSmtp->datasend($oMime->stringify);
  $oSmtp->dataend();
  $oSmtp->quit;
}else{
  $err = 'SMTP Server Authentication Error!!';
}

今回はCSVなのでContent-Typeはapplication/octet-streamに。

GmailアドレスはGoogla AppsのでもOK。


問題なく稼動したのでcronにスケジューリング

今夜から毎晩2:00にメールが届く予定。

参考にしたサイト

tdwongtdwong 2008/12/31 04:58 Excellent example. Thank you so much.

ItohItoh 2009/02/25 11:22 ありがとうございました。
大変参考になりました。smtpサーバーの認証関連のサンプル例ってなかなか無くて
smtpサーバからauthで蹴られる理由が分からなくて、1週間悩んでいました。

趣味で会社のイントラ内で使うスケジュール差分配布のツール作っています。
本当にありがとうございました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証