Perlでメール送信


アップグレード通知用の文章を作成するところから1歩進めてみた。


ちなみに、Perlでメールを送る部分に関しては、下記ホームページを参照した。


河馬屋二千年堂's Page
http://homepage3.nifty.com/hippo2000/index.htm


jcode.plとJcode.pmを使う例が掲載されていたのだが、jcode.plを使うと、文字化けする箇所があったので、Jcode.pmを使うことにした。


ちなみに、jcode.plで文字化けする場合は、文字化けする文字の間に「\」を入れると文字化けしなくなる。例えば、「表示」という文字が文字化けする場合は、「表\示」としてやることで、文字化けしなくなる。


「\」は、正式には、バックスラッシュで、Windowsの日本語版では、バックスラッシュのフォントが無いから、これを代用しているだけ。バックスラッシュって、「\」の半角のやつ。わかりやすいのは、英数字でキーボードの「ろ」のキーを押してみれば、キーに表示されている「\」ではなく、「\」が入力されるはず。


今回、jcode.plを避けたのは、一度、試しに送ってみないと、どの文字が化けるのか確認できないという点だ。これだと、作成した文章を送って確認するという手間が増えることになる。


今回は、上記ホームページの「HTMLメールの例」を元にして、一部を修正して使うことにした。


jcode.pmを使う場合、日本語の箇所は、以下のようになる。

jcode('日本語部分')->変換コード


ちなみに、「Perlの例.html」という英字と日本語が混合している場合は、下記のようになる。

'Perl'.jcode('の例')->mime_encode().'.html'


今回みたいに複数行にまたがる日本語の文章を書く場合は、下記の用にすれば、書くことができる。要は、終了したい場所に「')」を書いて閉ざせばいいだけ。

jcode('

        日本語の文章

')


今回は、htmlメールではなくて、textメールにしたかったので、「#1. 送信用テキストの作成」を削除して、以下のようにした。

$oMime->attach(
	         Type => 'text/plain;charset="iso-2022-jp"',
	         Data => jcode('

				本文の内容

				')->jis,
	         Encoding => '7bit'	       
);


Perlの例.pdf」というファイルを添付して送る場合は、Filenameを追加しておくといい。Pathだけだと、Perl以降の日本語が文字化けするし、フルパスで表示されるが、Filenameを付けておくと、日本語部分が文字化けしないで表示することができる。

$oMime->attach(
                Path     => 'c:\My Documents\Perlの例.pdf',
                Filename => 'Perl'.jcode('の例')->mime_encode().'.pdf',
		Type     => 'application/octet-stream',
		Encoding => 'Base64'
              );


とりあえず、以上のことを踏まえて、プログラムを作成し、hoge.txtという名前で保存しておく。


次に、以下のプログラムを作成した。このプログラムが、メインのプログラムになる。特徴は、以下の通り。

  • コンソール画面に新旧バージョンの番号を記入する画面が表示される。
  • バージョン番号を記入すると、hoge.txtの該当部分を置換する。
  • hoge.txtをhoge.plに変換する。
  • hoge.plを実行し、メールを送信する。
#! /usr/local/bin/perl
#********************************************************
# メインプログラム (Perl版)
#********************************************************

# コンソール表示部

print "古いバージョンの番号を入力して[Enter] を押してください。\
n";

$old = <STDIN>;
chomp $old;

print "新しいバージョンの番号を入力して[Enter] を押してくださ
い。\n";

$new = <STDIN>;
chomp $new;


# ファイル処理部

open (IN,"hoge.txt") || die "ファイルが見つかりませんでした。";
open (OUT,">hoge.pl");


while(<IN>){
		s/newver/$new/g;
		s/oldver/$old/g;
		print OUT;	
}


close IN;
close OUT;


# メール送信プログラムを起動

exec("perl hoge.pl");