飲み会とCGIとメールと

ひさびさに職場のメンバーとの飲み会にいってきました。ディープな情報収集ができたし、楽しかったです。ただ、ちょっとわがままいったところと、他にいいようがなかったのか反省する点も・・・(汗)そこで、飲みから返って気分転換に、メール送信できるCGIを組みました。# なにかおかしい


セキュリティー対策のため、自宅のメールサーバーは認証つきSMTPにしたいのですが、 一般に転がっているCGIはSMTP認証に対応していません。そこでNet::SMTPとAuthen::SASLを使って実装しました。以下の sendmail 部分にあたるソースです。

sub sendmail {
  my ($from, to, $subj, $body) = @_;
  my $SMTP;
  my $server = 'XXXXXXXXXX';    # メール(SMTP)サーバー
  # 文字化けするので、Jcode.pmつかって変換
  &Jcode'convert(\$subj,'jis');
  &Jcode'convert(\$body,'jis');
  # オブジェクトの作成
  $SMTP = Net::SMTP -> new($server,	# SMTPサーバー名を指定
  Hello => $server,                     # SMTPドメイン名を指定
  Timeout => 60);                       # 接続待ち許容時間(秒)
  my $user   = "username";              # SMTP認証用ユーザ名
  my $passwd = "password";              # SMTP認証用パスワード
  if ($SMTP->auth($user, $passwd)) {
    #ヘッダ部の組み立て
    $SMTP -> mail($from);# 送信元メールアドレスを指定
    $SMTP -> to($to);    # 宛先メールアドレスを指定
    #データ部の組み立て
    $SMTP -> data();
    $SMTP -> datasend("From:$from");	# 送信元(データ部)
    $SMTP -> datasend("To:$to");		# 宛先(データ部)
    $SMTP -> datasend("Subject:$subj");	# 件名
    $SMTP -> datasend("Mime-Version: 1.0");
    $SMTP -> datasend("Content-type: text/plain; charset=iso-2022-jp");
    $SMTP -> datasend("Content-transfer-encoding: 7bit");
    $SMTP -> datasend("Reply-to: $from");
    $SMTP -> datasend("$body"); # 本文
    $SMTP -> dataend();	   # データ終端、メール送信
    $SMTP -> quit;		   # SMTP接続の終了
  }
}

この関数を

#!/usr/local/bin/perl
use Net::SMTP;
use Authen::SASL;
my $mail_subj   = "タイトル";
my $mail_body = <<_MAIL_BODY_;
_MAIL_BODY_
&sendmail($mail_subj, $mail_body);

とかして呼び出すとうまくいきます。もう一息、送信に失敗したときの処理を加えたいところですが・・・。むむ。

  1. mトラックバックがありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

フォロー

Get every new post delivered to your Inbox.