• ベストアンサー

sendmailのFROMに日本語を使う

punchan_jpの回答

回答No.2

To: や From: には、ASCII文字の一部しか使えません。しかも、そ の構造も規定されているので、いわゆる xxx@yyy という形のアド レスを含まないプレーンなテキストだけでは指定できないはずです。 可能な形式は、 xxx@yyy か、 phrase <xxx@yyy> で、(text) という括弧入りのコメントを適当な位置に置けます。 phrase とか text の部分に日本語を入れたいときには、MIMEエン コードする必要があります。

参考URL:
http://www3.cds.ne.jp/~marimo/data/rfc/rfc2047-jp.txt
ryogoku
質問者

お礼

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

関連するQ&A

  • sendmailについて

    CGIからサーバにあるsendmailを使おうとしているのですが、分からない点があります。 メール自体は、きちんと送信されるのですが、To以外のヘッダーが本文と一緒に送信されてしまいます。 メールの送信者欄と件名欄が空白になってしまい困ってます。分かる人がいましたら教えてください。 下記がソースです。 &jcode'convert(*subject,'jis'); &jcode'convert(*message,'jis'); open(MAIL,"|$sendmail -t -f $master_mail"); print MAIL "To: $mail\n"; print MAIL "From: $master_mail\n"; print MAIL "Subject: $subject\n"; print MAIL "Contnt-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n\n"; print MAIL "$message\n"; close(MAIL);

    • ベストアンサー
    • Perl
  • sendmailで送信すると、迷惑メールになります

    フォームに入力された内容をperlでsendmailを使って送信すると、ウイルス対策ソフトの判定で、迷惑メールに入ってしまいます。 ▼プログラム $subject = 'テストメール'; $msg = "------------------------------------------------------------------ [名前] $name [住所] $address ------------------------------------------------------------------"; # subjectをBase64エンコード jcode::convert(\$subject, 'euc'); jcode::convert(\$subject, 'jis', 'euc', 'z'); $subject = '=?ISO-2022-JP?B?' . encode_base64($subject, '') . '?='; # 本文をJISに変換 jcode::convert(\$msg, 'jis'); &mail($to_mail, $from_mail, $subject, $msg); ▼サブルーチン sub mail{ my($to_mail, $from_mail, $subject, $msg) = @_; # sendmailによるメール発信 my $sendmail = '/usr/lib/sendmail'; # sendmailパス open(MAIL,"| $sendmail -t") || &error("メール送信に失敗しました"); print MAIL "To: $to_mail\n"; print MAIL "From: $from_mail\n"; print MAIL "Subject: $subject\n"; print MAIL "X-Mailer: Mail Form Sendmail\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-type: text/plain; charset=\"iso-2022-jp\"\n"; print MAIL "MIME-Version: 1.0\n\n"; print MAIL "$msg"; close(MAIL); } print MAIL "Content-type: text/plain; charset=\"iso-2022-jp\"\n"; を print MAIL "Content-type: text/plain;\n"; にすれば迷惑メールにならずに済むのですが、一部の利用者(特にMacユーザー)で、送信されたメールが文字化けしているようですので、何とかcharsetの指定も入れたいと思っています。 上記のプログラムで、おかしいところがあるでしょうか? どうか、ご教示いただけますよう、よろしくお願いします。

    • ベストアンサー
    • CGI
  • ホームページから意見を送るsendmailのcgiスクリプト

    表題のようなスクリプトを使っているのですが、 普通は特に問題ないのですが、「http://」などから始まる URLのみを書き込んで送ると、空メール(何も記載されない)となって 届いてしまいます。どこがおかしいのかわかりません。 以下のようなスクリプトです。 @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); if ($name eq 'to') { $to = $value; } if ($name eq 'from') { $from = $value; } if ($name eq 'subject') { $subject = $value; } if ($name eq 'body') { $body = $value; } } # cheack if ($from eq "") { $from = "unknown\@."; } if ($from eq " ") { $from = "unknown\@."; } # send mail &jcode'convert(*from,'jis'); &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); if (!(open(MAIL,"| $sendmail -t"))) { &error('システムエラー','メールの送信に失敗しました。'); } print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain; charset=iso-2022-jp\n"; print MAIL "$body\n"; close(MAIL); # view html &jcode'convert(*from,'sjis'); &jcode'convert(*subject,'sjis'); &jcode'convert(*body,'sjis'); $body =~ s/\r\n/\r/g; $body =~ s/\n/\r/g; $body =~ s/\r/<BR>/g;

    • ベストアンサー
    • CGI
  • Sendmailの文字化けについて

    以前にも同じ質問をしたのですが、いまいち解決していないので、もう一度質問させて頂きます。 ホームページでsendmailをつかってフォームより記入してもらった内容を自分のところと確認メールとして記入した人のところに送るようにしていますが、確認メールが文字化けすることがあるようです。 しかし、全ての人に対して化けるというわけではなく、ほとんどの場合は大丈夫なようですが、一部の人に対してだけ化けるようです。 関係しそうな部分を大まかに書くと下記のようにしておりますが、間違っているでしょうか? if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); $xx =$value; &trans; $value = $xx; } sub trans{ $from='[@01-9A-Za-z._-]'; $to='[@01-9A-Za-z._-]'; &jcode'convert(*xx, 'euc'); &jcode'convert(*from, 'euc'); &jcode'convert(*to, 'euc'); &jcode'tr(*xx, $from, $to); &jcode'convert(*xx, 'sjis'); } &jcode'convert(*message,'jis'); if (!open(MAIL,"|$sendmail $mail_address")) {&error;} &jis("Subject: $mailname"); print MAIL "$msg\n"; print MAIL "To: $mail_address\n"; print MAIL "From: $mailfrom\n"; print MAIL "\n"; print MAIL "$message"; close(MAIL); sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis');}

    • ベストアンサー
    • Perl
  • sendmailで送信の時に文字化け

    皆さんお世話になります sendmailを使用してメール送信しています 送信はちゃんと出来て、WEB上のメールで見る限り 問題は無いのですが、アウトルックエクスプレスで 受信すると文字化けしてしまいます。 #// メール送信 # print MAIL $mlms; # require './jcode.pl'; jcode'convert(*mlsb, "jis"); jcode'convert(*mail_msg, 'jis'); $mlhd = "From: $mlfr" . "\n" . "To: $mlto" . "\n" . "Subject: $mlsb" . "\n\n"; # Err check $err = 1; if ($mlms cmp "" && $mlfr cmp ""){$err = 0} open(MAIL, "| $mailer -t") or $err = 1; if ($err == 0) { print MAIL $mlhd; print MAIL "\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL 'Content-Type: text/plain; charset=iso-2022-jp' . "\n\n"; print MAIL $mail_msg; print MAIL "\n\n" . "." . "\n"; close(MAIL); プロバイダはwakwakです 何か足りない物があるような気がします よろしくご指導お願いします。

    • ベストアンサー
    • CGI
  • アンケートフォームに機能の付け加え。

    ホームページ上で、訪問者からアンケートを採れるsendmailを使用した CGIを設置しています。ここに、訪問者から簡単な素材を提供して頂けるよう 以下のようなスクリプトに、小さなファイル(gif画像など)を 添付して送れるように機能を付け足したいです。 どうすればいいか、困っています。どうすればよいでしょうか? @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); if ($name eq 'to') { $to = $value; } if ($name eq 'from') { $from = $value; } if ($name eq 'subject') { $subject = $value; } if ($name eq 'body') { $body = $value; } } # cheack if ($from eq "") { $from = "unknown\@."; } if ($from eq " ") { $from = "unknown\@."; } # send mail &jcode'convert(*from,'jis'); &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); if (!(open(MAIL,"| $sendmail -t"))) { &error('システムエラー','メールの送信に失敗しました。'); } print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain; charset=iso-2022-jp\n\n"; print MAIL "$body\n"; close(MAIL); # view html &jcode'convert(*from,'sjis'); &jcode'convert(*subject,'sjis'); &jcode'convert(*body,'sjis'); $body =~ s/\r\n/\r/g; $body =~ s/\n/\r/g; $body =~ s/\r/<BR>/g;

    • 締切済み
    • CGI
  • sendmail実行時のエラー

    受け渡されたパラメーターをセットしてsendmailを実行すると「Premature end of script headers:」というエラーになります。 試しにパラメーターを直セットしてsendmailすると、文字化けはしますが送信はされました。 メールでなく、ファイルに出力してみたところ、 From: " =?ISO-2022-JP?B?GyRCJDUkRiQ1JEYbKEI=?= "<xxxx@xxxx.ne.jp> Subject: =?ISO-2022-JP?B?GyRCIXo7cU5BQEE1YRsoQg==?= この2つだけが文字化けしていて、本文は大丈夫でした。 ソースは以下の通りです。 require './jcode.pl'; # MIMEエンコードライブラリを使う $mimew = './mimew.pl'; ・・・・・略 # MIMEエンコード if (-e $mimew) { require $mimew; $subject = &mimeencode($mail_sub); $from = &mimeencode("From: \"$in{'cname'}\" <$in{'mail'}>"); } else { $subject = $mail_sub; &jcode'convert(*subject,'jis'); $from = "From: $in{'mail'}"; } ・・・・パラメータのコンバート&jcode'convert(データ, 'jis'); ・・・・メール本文($mail_body)のセット $err = 0; open(MAIL,"| $sendmail -t") || $err = 1; print MAIL "To: $mailto\n"; print MAIL $from, "\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n\n"; print MAIL "$mail_body\n"; close(MAIL); 文字化けもですが、まずはエラーを解消するにはどうしたらいいでしょうか。教えて下さい。お願いします。

  • sendmailができない

    (1)お問い合わせフォームを入力(2)入力データを確認する(3)最後に指定先のメールに送り終了 という具合ですが(3)のところで指定先にメールが届きません。メール自体も送られてこないのですがどのような方法があるのでしょうか?どうか教えていただけないでしょうか?お願いします。 (3)のソースコートです。------------- &header; open (KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # ファイルの内容を1行単位ですべて配列allに読み込む @all = <KEIJI>; split(/:/, $_); if( $_ = $all[0] ){ ($time, $name, $mail, $title, $message, $to) = split(/:/); #送信前処理 &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); # send mail open(MAIL, "| /usr/lib/sendmail -t"); print MAIL "TO: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "\n"; print MAIL "---------------------------------------------\n"; print MAIL " 名前:$name\n"; print MAIL " 内容:$body\n"; print MAIL " お名前:$firstname $secondname\n"; print MAIL " かな:$kanafirstname $kanasecondname\n"; print MAIL " 所在都道府県 :$area1 $area2\n"; print MAIL " 電話番号:$telno\n"; print MAIL " 性別:$sex\n"; print MAIL " メールアドレス:mailto:$mailad\n"; print MAIL "お問合わ、ご相談内容:"; print MAIL " $con1\n"; print MAIL "---------------------------------------------\n"; close(MAIL); &one_message; } close(KEIJI); # フッターを表示するサブルーチン &footer;

  • メール送信のFromアドレスについて

    始めまして。 taki2といいます。 Perlのメール送信で使用するFromアドレスで分からない 事がありますので、アドバイスをよろしくお願いします。 -内容- Fromをtaki@xxx.comと設定してメールを送信した場合、実際届くメールのFromには taki@xxx.com と、表示されます。 しかし、Fromを"taki@xxx.com"と設定した場合 実際届くメールのFromは "taki@xxx.com"@xxx.com と、表示されます。 ""をつけるとどうやら""の中がアカウントと認識されるみたいです。 これを""があっても@xxx.comを設定せずにしたいのですが、どうすればよいのでしょうか? ちなみにメール送信しているプログラムは以下の通りです。 sub MailSend {  my $head = $_[0];  my $body = $_[1];  my $flgMime = $_[2]; #エンコード判定フラグ my $in_return = 0; my $rc;  #メールコマンド  my $cmdMail = "/usr/lib/sendmail -t";  #文字コード変換  ##件名  &Jcode::convert( $$head{ "SUBJECT" }, "jis" ); ##本文 foreach( @{$body} ){ &Jcode::convert( $_, "jis" ) }; #ヘッダのMIMEエンコード if( $flgMime ){ $$head{ "SUBJECT" } = MIME::mimeencode($$head{ "SUBJECT" }); } #メール送信 $rc = open( OUTMAIL, "| $cmdMail" ) ; if($rc) { print OUTMAIL "From: $$head{ "FROM" }\n"; print OUTMAIL "To: $$head{ "TO" }\n"; print OUTMAIL "Cc: $$head{ "CC" }\n"; print OUTMAIL "Bcc: $$head{ "BCC" }\n"; print OUTMAIL "Subject: $$head{ "SUBJECT" }\n"; print OUTMAIL "\n"; foreach( @{$body} ){ print OUTMAIL $_."\n" }; print OUTMAIL ".\n"; close( OUTMAIL ); } else{ $in_return = 1; } return $in_return; }

    • ベストアンサー
    • Perl
  • sendmailが上手く動かないのかメールが届きません

    こんにちは。 sendmailが上手く動かなくて困っています。特にエラーは出ないのですが、メールが全く届きません。 以下プログラムです。(必要そうな箇所だけ) $sendmail = '/usr/sbin/sendmail'; $mail ='mail@xxx.xx'; $msub = 'メールタイトル'; &mailto if ($sendmail && $mail); sub mailto { $mcom = $FORM{'comment'}; $mcom =~ s/&lt;/</g; $mcom =~ s/&gt;/>/g; # メール本文 $mbody = <<"EOM"; $mcom -------------------------------- ホスト名:$host ブラウザ:$ENV{'HTTP_USER_AGENT'} -------------------------------- EOM if ($msub eq ""){ $msub = NO Subject; } &jcode'convert(*msub,'jis'); &jcode'convert(*mbody,'jis'); open(MAIL,"| $sendmail -t") || &result; print MAIL "To: $mail\n"; print MAIL "From: $mail\n"; print MAIL "Subject: $msub\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $ver\n\n"; print MAIL "$mbody\n"; close(MAIL) || &result; } プログラムは一言フォームからコメントを受け取るものです。 jcodeの読み込み、decode等は正常に行われており、openやcloseの前後にprint $mbodyなどしてみても正常に表示されることから、確かだと思います。 他の有名なCGIサイトさんのスクリプトや本等を参考に自作したもので、もちろんそれらのメールフォームは正常に動きます。 ですから、何か小さなミスをしているだけだと思うのですが、それが何なのか見つけることが出来ません。 もし何かお気づきの点がありましたら、教えていただければと思います。

    • ベストアンサー
    • Perl