小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

PerlでSMTPモジュールを使ったメール送信(バージョンアップ版)

先日のサンプルの漢字エンコード部分(サブジェクトとメール本体メッセージ)を標準モジュール(Encode.pm)を使って書き換えてみました。

#!/usr/bin/perl -w
use Encode qw(from_to encode);
use Net::SMTP;
use strict;

#メールアドレス設定
my $from = 'FromAddress@aaa.co.jp';
my $mailto= 'ToAddress@bbb.co.jp';

#サブジェクト設定
my $subject = 'テストメール';
from_to($subject, 'shiftjis', 'iso-2022-jp');
encode('MIME-Header-ISO_2022_JP', $subject);

#メールヘッダー設定
my $header = << "MAILHEADER";
From: $from
To: $mailto
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = 'ISO-2022-JP"
Content-Trensfer-Encoding: 7bit

MAILHEADER

#メール本体設定
my $message = << 'MAILBODY';
メッセージ1
メッセージ2
MAILBODY

#文字コードをJISに変換
from_to($message, 'shiftjis', 'iso-2022-jp');

#メール送信オブジェクト設定
my $smtp = Net::SMTP->new('mailhost');
if ( !$smtp ) {
     print "メールサーバーにアクセスできません!";
     exit;
}

#メール送信
$smtp->mail($from);
$smtp->to($mailto);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($message);
$smtp->dataend();
$smtp->quit;

追記:

結構アクセスがあるみたいなので、もうちょっと説明を加えておきます。


ソースカスタマイズのポイントは、以下の通り。

  • メールアドレス設定の内容を送信したいアドレスに変更する。
  • メール送信オブジェクト設定のホスト名(or IPアドレス)をあなたが使っているSMTPサーバーに変更する。
  • 後は、ご自分用にサブジェクト内容とメール本文内容を変更して下さい。


メール送信プログラムのポイントは、以下の通り。

  • サブジェクトはエンコードする。
  • 本文の漢字コードはJIS(ISO-2022-JP)コードにする。
  • メールヘッダーとメール本体の境目に空行(改行)を入れる。


ちなみに、サブジェクトはエンコードとは

  • はじめに、サブジェクトをJISコードに変換する。
  • 『from_to($subject, 'shiftjis', 'iso-2022-jp');』の部分。
  • それを、BASE64という形式でエンコードする。
  • それの、前後に =?iso-2022-jp?B? と ?= を付加する。
  • 『encode('MIME-Header-ISO_2022_JP', $subject);』の部分。


ちなみにのちなみに、BASE64エンコードとは

  • 元データを6ビットずつに分割する。
  • 6ビットに満たない分は0を追加して6ビットにする。
  • この6ビットを A〜Z、a〜z、0〜9、+、/ の表示可能コードに4文字ずつ割り振る。
  • 最後が4文字に満たない場合は、 = 記号を追加し4文字にする。