CGIを使ったメールを送信するプログラムを作りたいなと思っていた。
だけど、メールの送信は文字コードの問題とか、
SendmailとかSMTPとかいろいろややこしい問題があることも
知っていて、なんとか簡単に
めんどくさいコード書かずにできないかなと思っていた。
それで、MTが持っているメールの送信機能を使ってできないかな?
と思ったらすげーあっさりできたのでウハウハ。
MT::Mailというモジュールがあって、それをuseしてあげれば
SendmailやSMTPや文字コードのことを何も考えなくても
メールを送ることができます。
Movable Type オブジェクト・リファレンス - MT::Mail
MT::Mail - movabletype.org
ソースはこんな感じです。
mt-mail.txt
拡張子を「.cgi」に変えて、パーミッションを755とかにして、
MTのlibの位置とメールアドレスを修正すれば使えます。
use CGI;
use lib '../../mt/lib'; #MTのlibフォルダまでの相対 or 絶対パス
use MT::Mail;
my $q = CGI->new;
print $q->header( -charset => 'utf-8'), $q->start_html( -lang => 'ja', -encoding => 'utf-8');
print $q->h1("MT::Mailを使ってみるテスト");
&body($q);
print $q->end_html;
sub body{
-
my $q = shift;
my $head = {-
To => 'to@example.jp', #ここは適宜書き換えてね
Subject => 'From MT::Mail', #ここも任意
#From => 'from@example.jp' #なくても動作しました
my $body = 'MT::Mailを使ったテストメールだよ';
my $flag;
$flag = MT::Mail->send( $head, $body)
or print $q->p("送れなかったーよ: ".MT::Mail->errstr);
print $q->p("送れたみたい") if $flag;
-
To => 'to@example.jp', #ここは適宜書き換えてね
送信先のメールアドレスとメールタイトル、そしてメールタイトルの
文字列を与えてやればそれでOK。
文字コードの心配も必要なしで、
文字列に日本語が使われていても受信したメールの文字化けはなかった。
こうやってMTライラリ中のモジュールを外から使うスキルがあれば、
いろいろ楽になりそうだな。
***
use CGIについては以下の記事
http://nozawashinichi.sakura.ne.jp/usingmt/2009/09/use-cgicharset.html