カレッヂ |
質問者 まこりん
投稿日 1/31(水) 18:40:44
Perl5 です。 メールで送信する際、 Fromに日本語を混ぜて送信することは可能でしょうか・・・ ユーザー側には、 送信者に、「まこりん」 返信アドレスとして、makorin@megajapan.com を設定するものです。 例: From : まこりん <makorin@megajapan.com> どうにかして、CGI側で、コントロールすることは、 できないものでしょうか? 初心者の浅知恵で、つくったもので、 不適切な面々がございましょうが、 できましたら、 よろしく、ご教授の程おねがい いたします。 ==========================ソース================================ #メール設定 $sendmail = '/usr/lib/sendmail'; $nkfpath = '/usr/bin/nkf'; #日本語 require 'jcode.pl'; $Retmail='system@megajapan.com'; $Errmail='system@megajapan.com'; $Mailfrom="まこりん <makorin@megajapan.com>"; $Head = "$Mailtitle"; use MIME::Base64; $mimed = encode_base64($Head); &jcode'convert(*Head, "jis"); chomp $mimed; $Head = "=?ISO-2022-JP?B?".$mimed."?="; open MAIL , "|$nkfpath -j | $sendmail -t " or die "メール送信処理失敗\n"; print MAIL "From: $Mailfrom\n"; print MAIL "To: $MEmail\n"; print MAIL "Subject: $Head\n"; print MAIL "Return-Path: $Retmail\n"; print MAIL "Errors-To: $Errmail\n"; print MAIL "Mime-Version: 1.0\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; print MAIL "$Mailbody\n"; close(MAIL); ==========================ソース================================ |
回答者 さくら
[削除]
投稿日 2/18(日) 02:42:45
質問から時間が経っているので、解決していれば良いのですが。 貴方の書いたコードを試していないのですが、 FROM: に日本語は使えるでしょう、使えない理由が見当たらないからです。 ただ、貴方の書いたコードには多少疑問があります。 sendmeil にはダブルクォートで括った文字列の中に@を置くことは許されないので \@ とエスケープする必要が有るかもしれない。 ---------- $Head = "$Mailtitle"; use MIME::Base64; $mimed = encode_base64($Head); &jcode'convert(*Head, "jis"); chomp $mimed; $Head = "=?ISO-2022-JP?B?".$mimed."?="; ----------- この部分で作られた、$HeadはSubjectに書かれるようですが、 $mimed = encode_base64($Head); これは、$Head つまり$MailtitleをBase64でエンコーディングしているのでしょう。 &jcode'convert(*Head, "jis"); これは、Headをタイプグロブで渡しているので、$Head つまり $Mailtitle をjisに変換しているのでしょう。 上記の2点は同じ$mailtitleを変換していて、片方は$mimed に代入、片方はそのままで、 その後、$Headには、 $Head = "=?ISO-2022-JP?B?".$mimed."?="; が代入されてしまう、これなら &jcode'convert(*Head, "jis"); は要らないのではないでしょうか。 しかも nkf にパイプされているので、MAIL に書かれた日本語は全てJISに変換されます。 もし、エンコードした$mimed を jis変換しようと考えたのなら、これも不用です。 base64は、ASCII文字に変換するものです。 簡単に説明すると、SMTPというメールエージェントは7ビットしか保証しません。 ASCIIやJISは7ビットで表現していますが、S-JIS や EUC は8ビットで表現しています。 これを7ビット以下に縮める必要がありますね、そこで、8ビットを3つ繋げて24ビットシーケンスを作ります。これを6ビットに分割して、上位に0をつけて4文字のASCII 文字にします。 簡単にはこう言うことです。 説明は必要無かったかもしれませんが、TEXTをJISで送信するならエンコーディングも必要無いかもしれませんね。 print MAIL "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; この部分はヘッダーの最後ですが、ヘッダーとボディーの間に、空行が必要なので もう一つ、\n がいるのではないでしょうか。 |
質問者 まこりん
[削除]
投稿日 2/19(月) 10:51:44
丁寧なご説明。 大変ありがとうございます。 何分、初心者の浅知恵で、つくったもので、 不適切な面々がおおかたっと思います。 実は、まだ実現していないのです。(2001/02/19) とりあえず修正して、こちらでもやってみようと思っております。 何か、参考となるヒントはございますでしょうか・・・ できましたら、 よろしく、ご教授の程おねがい いたします。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |