CGI-BBS > CGI > Perl > メールで、Fromに日本語で送信することは可能でしょうか


カレッヂ
カレッヂ


質問者 まこりん  投稿日 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裏技