電子書籍の厳選無料作品が豊富!

以下の環境にてメール送信プログラムを作成していますが、
ありがちな文字化け、且、ボディーが表示されない不具合が発生しています。

サーバ:linux apache レンタルサーバ
※Encode.pm、Jcode.pm無し。モジュールインストール不可。
Perl version: 5.006001
ソースエンコード:utf-8


自分の解釈としてはutf8で記述しているので、
charset=utf-8にしておけば、
MIMEエンコードさえしてやれば
表示できると考えているのですが、
やはり甘い考えなのでしょうか?

また、同サイト質問NO2868794も参考にさせていただきましたが、上手くいきません。


以下ソース(エンコード:utf-8)

use utf8;
use MIME::Base64;
use POSIX;

※アドレス表記はこのサイトの投稿チェックに引っかかるので省略します。

my $to = 'XXXX@XXXX'.XXX;
my $from_nm = "送信者名";
my $from_adr = "XXXXX@XXX.XXX";
my $subject = "メール表題";
my $body = "本文";

# 送信者名を MIME エンコード
encode_base64($from_nm,"");

# subjectを MIME エンコード
encode_base64($subject,"");
$subject = "=?utf-8?B?" . $subject . "?=";

# 本文を MIME エンコード
encode_base64($body);

my $MailPass = "XXXX/XXXX/XXX"; #SendMail Pass

open(MAIL,"| $MailPass -t");

#========================================================
print MAIL <<"EOF_MAIL";
From: $from_nm<$from_adr>
To: $to
Subject: $subject
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
MIME-Version: 1.0

$body
EOF_MAIL
#========================================================
close MAIL;

その他、色々ググっては見たのですが、自分ではみつけられず、
どうかアドバイスありましたらよろしくお願いいたします。

A 回答 (1件)

> ありがちな文字化け、且、ボディーが表示されない不具合が発生しています



「ありがちな文字化け」ってどんなのですか?
「ボディーが表示されない」だけですか?送信自体されてないのですか?



まず、すごく基本的なことなんですけど
encode_base64 のマニュアルを良く読むことから始めてはいかがでしょうか?
http://perldoc.jp/docs/modules/MIME-Base64-2.12/ …
このプログラムでは、おそらく、あなたの期待通りに動作していません。

あと、いきなりメールにするのではなく
my $MailPass = "/usr/bin/cat";
などして、標準出力で内容が正しいか確認するのもいいかと。

この回答への補足

アドバイス有難うございます。

「ありがち」と言うのは、ウェブで検索してもよく質問されているので、
「よくある質問で恐縮です」という意味で表現させて頂きました。
紛らわしい表記で申し訳ありませんでした。

メール内容としては、ヘッダ、ボディー共に送信されています。
ただ、エンコードが正常にできていないのか、メーラの方でヘッダ内文字が文字化けし、
またボディーが表示されていない状態です。

アドバイス通りよくマニュアルを良く読むと、
エンコード値はリターン値として返ってくる事に気が付き、
修正しましたらボディーが出てくるようになりました。
有難うございました。

しかしながら送信者の日本語表示部分だけ英数字で表示されており、
ここがどういう事なのかが理解できません。

「送信者名」→「6YCB5L+h6ICF5ZCN」

試しにエンコード無しで試してみましたら、
beckyでは正常に出力されましたが、
OutlookExpressだと文字化けしてしまいました。

送信者名部分はメーラによって処理が異なるのでしょうか。
何か特殊な方法を取る必要があるのでしょうか?

またアドバイスありましたら宜しくお願いします。

補足日時:2012/08/25 15:07
    • good
    • 0
この回答へのお礼

表題と同じく、送信者も同じコードを付加させることで正常に表示されるようになりました。

# 送信者名を MIME エンコード
$from_nm=encode_base64($from_nm,"");
$from_nm = "=?utf-8?B?" . $from_nm . "?=";

# subjectを MIME エンコード
$subject=encode_base64($subject,"");
$subject = "=?utf-8?B?" . $subject . "?=";

有難うございました。

お礼日時:2012/08/25 16:21

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