MIMEエンコード

前回の続きだけど(perlでsmtpサーバーに接続して送信

問題なのが、意外に文字列処理。

昔は、eucで書いて、Jcodeでsjisやjisに変換していました。

今は、utf8で書いて、Unicode::Japaneseで処理してます。

MIMEエンコードをどうしようかな。MIMEの部分だけ、JcodeかEncodeを使用しようとしたら、処理がすごく遅いという、気になる記事が。([Perl] 帰ってきたEncodeのMIME-Header-ISO_2022_JPは遅いんじゃ? たまには呪文をとなえてみるか:仕事版/ウェブリブログ

今のJcodeはEncodeのWrapperだから、どっちも同じ事なんだろうな。(Jcode.pm

 

じゃぁどうしようかなと言うことなんだけど。

携帯キャリアによっては少し処理を変えた方が良いかも(携帯/絵文字メール送信(Perl+Encode-JP-Mobile) – yanor.net/wiki)。

いやいや。まずは標準的な機能を導入するのが先だな。

 

use MIME::Words;
$subject = Unicode::Japanese->new($subject)->jis;
$header .= "Subject: ".encode_mimeword($subject,’B’,’iso-2022-jp’)."\n";

こんな感じにする事にします。

 

しかし、このままでは長い件名だとそのままなので、ある程度の文字数で改行する必要がある。(http://www.puni.net/~mimori/rfc/rfc2822.txt

2.1.1. 行の長さの制限

それぞれの行の文字はCRLFを除いて、決して998文字以下でなければならず(MUST)、78文字以下であるべきである(SHOULD)。

これに対応するには、Perlメモのbase64あたりの事をしないとダメなんだなぁ。
簡単に出来ると思ったら、結構しんどそう。
またこれは改めて対応することにする。

perlでsmtpサーバーに接続して送信

何年かぶりに、Perlからメール送信のプログラムを作ってる。

今まではsendmailコマンドをたたいてたけど、昨今の状況だと、適当なサーバーからのsendmailは迷惑メールとして扱われる。

ということで、「差し出し元のEmailアドレス正規のsmtpサーバー」に接続してメール送信を行うことにします。smtp authやらサブミッションポートやらがあるので、
Net::SMTP
を使用。

Authen::SASL
も忘れずにインストール。これが無くてもエラーは出ないが、動作しない。(オイ!)
これで、はまる人多い。(auth – World Wide Walker)

送信ポートの指定も、はまる所のようだ。(G-chan Square – [perl] Net::SMTPでメールを送ろう
本家のドキュメントには書いてないが、実際はポートの指定が出来るようだ。
普通はSMTPサーバーのポートは25番なのですが、CGIの設置はホスティングサーバーを使用して送信する事になると思うので、たいていは25番は不可(OP25B)。
サブミッションポートの587番を指定する。で、サブミッションポートを使うときは、SMTP認証が必須って所も多い。(詳しくは、Emailアドレスの提供元へ。ISPとかGoogleとか・・・。)

 

#!/usr/bin/perl
use Net::SMTP;
my $mailhost = 'smtp.exmple.jp'; # SMTP用のサーバー名
my $mailport = 587; # SMTP用のポート番号。25番のことも多い。
my $mail_username = 'exmple-user'; # メールアカウント
my $mail_password = 'exmple-pass'; # メールのパスワード
my $from_mail = 'from@exmple.jp'; # 送信元のメールアドレス
my $to_mail = 'sendto@exmple.jp'; # 宛先のメールアドレス
my $subject = 'test soushin';
my $message = 'body test mail';
my $header;
$header = "From: $from_mail\n";
$header .= "To: $to_mail\n";
$header .= "Subject: $subject\n";
$header .= "MIME-Version: 1.0"."\n";
$header .= "Content-type: text/plain; charset=ISO-2022-JP"."\n";
$header .= "Content-Transfer-Encoding: 7bit"."\n";
my $smtp = Net::SMTP->new($mailhost, Port => $mailport);
$smtp->auth($mail_username, $mail_password);
$smtp->mail($from_mail);
$smtp->to($to_mail);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend("\n");
$smtp->datasend($message);
$smtp->quit;

cpan

◆インストールされているかの確認
perl -e ‘use Authen::SASL’

◆インストールするとき
cpan -i Authen::SASL

 

Movable Typeのwlwmanifest.xmlファイル

Windows Live Writer から Movable Typeに記事を投稿する場合に、マニフェストファイルを設定しておけば、色々良いらしい。

Windows Live Writer を利用したブログ記事やウェブページの作成
こちらを元に掲載すれば良いのですが、イマイチ変。
調べてみたら、CGIのパスが入っていない。
そこで、ちょっと編集してみた。

 

<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns="http://schemas.microsoft.com/wlw/manifest/weblog">
<options>
<clientType>MovableType</clientType>
<supportsCategoriesInline>Yes</supportsCategoriesInline>
<supportsSlug>Yes</supportsSlug>
<supportsPages>Yes</supportsPages>
<supportsScripts>Yes</supportsScripts>
<supportsEmbeds>Yes</supportsEmbeds>
<supportsTrackbacks>Yes</supportsTrackbacks>
<supportsPostAsDraft>Yes</supportsPostAsDraft>
</options>
<weblog>
<serviceName>Movable Type</serviceName>
<homepageLinkText>ブログを表示</homepageLinkText>
<adminLinkText>ブログの編集</adminLinkText>
<adminUrl><mt:CGIPath><mt:AdminScript encode_xml="1"></adminUrl>
<postEditingUrl><mt:CGIPath><mt:AdminScript encode_xml="1">?__mode=view&amp;_type=entry&amp;blog_id={blog-id}&amp;id={post-id}</postEditingUrl>
</weblog>
</manifest>

 

説明を日本語にして、<mt:CGIPath>を追加しただけ。

多くの解説ページでは、パスの部分を直書きしてるけど、上記だとコピペでどのような環境でも良いでしょう。

postEditingUrlの部分、{blog-id}はなんでMTタグじゃ無いんだろう?と思ったけど、これは、Live Writerが参照して書き換えるから、このままで良いのです。

postEditingUrlがちゃんと機能していると、「最近投稿した記事」の機能で、ブログサイトから最新の情報をダウンロードして編集が出来る。ブラウザで編集したりLive Writerで編集したり、自由度が増す。

supportsPostAsDraft

これを追加すると、下書きをサーバー上に保存する機能が追加になります。

wlwmanifest.xmlのカスタマイズ – WindowsLiveWriter + MovableType – たぬの麻雀日記ここを参考にしました。


まだまだいろんな事が出来そうです。

Windows Live Writer Provider Customization API

Xperia(SO-01B)の為のお勧めオプション品

iPhoneにしようかなと思いましたが、Xperiaにしました。
実物はまだ届いていないけど、オプション品も先に注文してた方がいいね。

◆安いのは、シリコンケース
シリコンスーツ for Xperia SO-01B(ブラック)

◆少し固めのケース
レイアウト ソニー・エリクソン Xperia™(X10、ドコモSO-01B)用ラバーコーティングシェルジャケット/マットレッド RT-SE10C3/R


レイアウト ソニー・エリクソン Xperia™(X10、ドコモSO-01B)用ラバーコーティングシェルジャケット/マットブラック RT-SE10C3/B


レイアウト ソニー・エリクソン Xperia™(X10、ドコモSO-01B)用ハードコーティングシェルジャケット/クリア RT-SE10C2/C

日本通信 bモバイルSIM U300 6ヶ月(185日)使い放題パッケージ BM-U300-6MS