dポイントプレゼントキャンペーン実施中!

Windowsサーバー上から、Perlを使って毎日メールの自動送信をしているのですが、
Thunderbirdのバージョンを38.0.1に上げたところ、今までは正常に出ていたメールのタイトル文字が化けるようになってしまいました。
ソースを見ると、iso-2022で表示した状態で、

Subject: 【Network】営業所ルータ★接続確認
MIME-Version: 1.0
Content-type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
(以下本文)
Ping ○ : xx.xx.xxx.xxx Server1 2015/06/19 08:10:06

のように出ます。
正常なメールを見ると、タイトルのところで、同じくiso-2022で表示すると、
Subject: =?ISO-2022-JP?B?GyR...... のように出るので、タイトル部分の送り方が拙いんだろうとは思うのですが、対応策を調べてみたのですが、良く判りません。

ちなみに、ソースは下記のように$messageにタイトル文字列を与えた関数で行っています。
エンコードの仕方がおかしいのでしょうか?

use Net::SMTP;
use Encode;
sub mail_send {
my ($subject, $message) = @_;
my $mailhost = '***.***.***.***'; # SMTP用のサーバー名
my $mailport = 587; # SMTP用のポート番号
my $mail_username = '***'; # メールアカウント
my $mail_password = '***'; # メールのパスワード

my $from_mail = '******'; # 送信元アドレス
my @to_mail = ('*****', '*****'); # 送信先アドレス

Encode::from_to($subject, "shiftjis", "iso-2022-jp");
Encode::from_to($message, "shiftjis", "iso-2022-jp");
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;
}

A 回答 (1件)

次のページが参考になるかもしれません。



「Perl/メール/MIMEヘッダエンコード - yanor.net/wiki」
http://yanor.net/wiki/?Perl%2F%E3%83%A1%E3%83%BC …
    • good
    • 0
この回答へのお礼

有難うございました。
調べていましたら、正しいのか判りませんが、とりあえず以下の方法で解決しました。ご指摘の方法と同じではないかと思います。

Encode::from_to($subject, "shiftjis", "iso-2022-jp");
の部分を
use Jcode;
&Jcode::convert(\$subject,'jis');
$subject = jcode($subject)->mime_encode;
と置換えたら化けなくなりました。

どうもお騒がせしました。

お礼日時:2015/06/23 13:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!