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

PerlでMailを送信プログラムを作ってみようと考えています。

本文は
HTML→Perl(cp932→UTF-8)→Mail送信
という形にしました。
下記コード(一部抜粋してます)

my $subject = 'Mail受付';

my $header = <<"end";
From: $from
To: $mailto
Subject: $subject
Mime-Version: 1.0
Content-type: text/plain;charset="UTF-8"
Content-Transfer-Encoding: 8bit
end

my $name =$q->param('name');
Encode::from_to($name, 'cp932', 'UTF-8');

$smtp->mail($from);
$smtp->to($mailto);
$smtp->to($subject);
$smtp->data();
$smtp->datasend("$name\n\n");
$smtp->dataend();
$smtp->quit;

そして、件名が文字化けしてしまうのですが、

MIME::Base64
MIMEエンコードを使いたいのですが、どのようにかけばいいのでしょうか???

my $subject = 'Mail受付';
↑ここに記述するとは思うのですが・・・

また、間違ったコードの使い方をしていればご指摘ください・・・

A 回答 (2件)

No.1です。



> ’ISO-2022-JP'←これは異字体が対応していないとネットで記載されていて
> 異字体を表示するならUTF-8ということだったのですが、

 はい。そういった場合はUnicode(UTF-8)かShift_JISを使用することに成ります。
 メールヘッダの日本語が入る可能性のある全ての行と本文をcharset属性で指定する文字コードに変換すればOKです。

 なお、JISの場合(ISO-2022-JPの場合)Content-Transfer-Encoding:行には 7bit と指定しますが、UnicodeやShift_JISの場合は 8bit と指定します。
 なぜ、JISは7bitでUnicode、Shift_JISは8bitなのかはそれぞれの文字コードのコード表を参照し、コードの値を2進数にしてみるとわかります。
 JISだと異字体が化ける理由も文字コードを眺めると分かります。


p.s.
異字体がなぜこんな面倒な取り扱いになっているのかや日本語の文字コードに興味をお持ちの場合は、大変古い連載コラムですが以下のようなものが参考になるでしょう。

http://internet.watch.impress.co.jp/www/column/o …
    • good
    • 0
この回答へのお礼

ありがとうございました。

おかげ様で、解決に至ることができました!

p.s.での参考サイトまで・・・;;
ありがとうございます!

お礼日時:2016/12/05 10:10

Base64はバイナリーコードをテキスト変換するためのものです。


メールの場合は添付ファイル部分をテキスト化するために使用します。
メールのFrom:、To:、Subject:などヘッダ行と本文はヘッダ行のContent-Type:行のcharset属性には何を指定されていますか?
受信側でSubject行の内容が文字化けするのは送信側がSubjectにセットした文字列の文字コードがcharset属性のそれと異なるからでしょう。

なお、使用する文字コードの標準はJISです。その場合、charset属性にはISO-2022-JPを指定します。
参考まで。
    • good
    • 0
この回答へのお礼

コメントありがとうございます!

そういうことなのですね!
charset属性にISO-2022-JPを指定すれば文字化けはしなくなりました。

しかしISO-2022-JPに変更すると
Encode::from_to($name, 'cp932', 'UTF-8');

Encode::from_to($name, 'cp932', ’ISO-2022-JP');
このようにする必要がありますよね・・?(自信がありませんが;;)

仮にこうすると件名、本文とも文字化けしないのですが、
’ISO-2022-JP'←これは異字体が対応していないとネットで記載されていて
異字体を表示するならUTF-8ということだったのですが、

例えば
my $name =$q->param('name');
このparamで受け取った(シフトJIS{cp932})
は最終的にUTF-8で送るようにすれば異字体も表示されるという認識で合ってますか??

でもそれだとEncode::from_to($name, 'cp932', 'UTF-8');
こういうこと以外に別の処理が必要になるということですよね・・

お礼日時:2016/12/02 10:48

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