CGIからsedmailを呼び出してメールを送信しています。
その時に差出人の部分の日本語が文字化けしてしまいます。
そこで&jcode'convertでjisに変えたのですが、今度は
CGIがサーバーエラーになってしまいます。
どうすればよいでしょうか。

スクリプトはこんな感じです。
-----------------------------------------------
$from = '両国';
$subject = 'テスト';

&jcode'convert(*from, 'jis');
&jcode'convert(*subject, 'jis');
&jcode'convert(*msg, 'jis');

$errno = 1 unless open(MAIL, "| /usr/lib/sendmail -t");
return 0 if $errno;

print MAIL "To: $MailTo\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/plain;\n\n";
print MAIL "$msg\n";
$errno = 2 unless close(MAIL);
return 0 if $errno;

このQ&Aに関連する最新のQ&A

A 回答 (2件)

解決できるような回答ではありませんが.



メールのヘッダに日本語を書くことは、基本的には
できません.
JISコードに変換後、、MIME(Base64)でエンコードして
から送付しないとダメです.(RFC2045,RFC2047)

jcode.pl でなく、jcode.pm には、
MIMEエンコードの機能が付いています.
http://openlab.ring.gr.jp/Jcode/index-j.html

他にも、MIME 関係のモジュールを利用する手もあります.
(MIME::Base64 など)

参考URL:http://www.din.or.jp/~ohzaki/perl.htm#JP_Base64
    • good
    • 0
この回答へのお礼

素早いご回答ありがとうございました!
どうやら送れそうです。頑張ってみます。
ありがとうございました。

お礼日時:2000/12/26 09:06

To: や From: には、ASCII文字の一部しか使えません。

しかも、そ
の構造も規定されているので、いわゆる xxx@yyy という形のアド
レスを含まないプレーンなテキストだけでは指定できないはずです。
可能な形式は、
xxx@yyy
か、
phrase <xxx@yyy>
で、(text) という括弧入りのコメントを適当な位置に置けます。

phrase とか text の部分に日本語を入れたいときには、MIMEエン
コードする必要があります。

参考URL:http://www3.cds.ne.jp/~marimo/data/rfc/rfc2047-j …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!
入れた覚えのないメールアドレスがFROMにくっついて
くるのはそのせいだからなのですね。
すっきりしました。ありがとうございました!

お礼日時:2000/12/26 09:04

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

このQ&Aと関連する良く見られている質問

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

Q「$" = ',';」という構文の意味は?

Perl スクリプト中に「$" = ',';」という構文が出てきたのですが、これはどういう意味ですか?

Aベストアンサー

"(ダブルクオート)内ではリスト値(@foo)も展開されますが、そのリスト値の区切り文字を定義する特殊変数で、デフォルトはスペースだそうです。

参考URL:http://www.tohoho-web.com/wwwperl1.htm#Tokushu

Q@×× = $q->param('**'); の書き出しについて

このようなチェックボックスを作って
<INPUT type="checkbox" name="q1" value="A">A<br>
<INPUT type="checkbox" name="q1" value="B">B<br>
<INPUT type="checkbox" name="q1" value="C">C<br>

このようなPerlの記述をして
use CGI;
$q = new CGI;
@q1 = $q->param('q1');

このようなCGIの値の書き出し部分はどうしたらいいですか?
print "<td width=300><font size=2>●●{'q2'}</font></td>\n";

上記の
@q1 = $q->param('q1');
に、チェックされた値が格納されているんですよね。
その値を表示させたいと思っています。
いろいろ教えてもらって、ここまでたどり着きました。

Aベストアンサー

#3さんの『お礼』にあるコードですが、間違っているところだけ書いておきます。

原因はCGI.pmと独自の入力処理が、それぞれデータをとり合っていることです。このコード上では、独自の入力処理の部分がSTDINを読み込んでしまうので、CGI.pmからは何も読む事は出来ません。

入力処理には、CGI.pmか独自入力処理の『いずれか』を用いてください。全て書いても使えるのは一つだけです。質問内容から考えられるお勧めは、CGI.pmを利用する事です。(オーバースペックですが、ひとまずそう言うことは考えない方針で。)

コードを見る限り、恐らく『データでコード処理』の部分を全て削除すれば大丈夫だと思います。

Q@color1 = ('0000ae',・・・,'$user_color')で・・

とまとです。

行き詰まりました(TェT)

標題の代入で、'$user_color'の部分を文字列ではなく、後から出て来るinputで入力した文字を代入させるにはどうしたらいいのでしょう?
※標題のままだと「$user_color」という"文字列"が代入されてしまいます。

Aベストアンサー

変数の内容を展開したければ、
' でくくらなければいいわけですが、
後から出てくるなら、その代入時点では
undefine 状態ですか?


おすすめ情報