- ベストアンサー
メール送信の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; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
お使いのsendmail.cfがドメイン部なしのメールアドレスfooをローカルドメイン付きfoo@xxx.comに書き換える設定になっているのだと思います。 sendmail.cfを修正してもいいですが、そもそもユーザがFromに何を入れるか予想できないのでPerlスクリプト側で入力チェックをするか、ある程度の加工をする必要があると思います。例えば、ダブルクォートを取り除くなら $from =~ s/"//g; です。 「RFC上正当なメールアドレス」かどうかを検査するには RFC2822を見て、メールアドレスとして許されるパターンと照合すればいいでしょう。
その他の回答 (2)
- Dpop
- ベストアンサー率51% (279/544)
#1 です。 <"taki@xxx.com"> ではありません。 <taki@xxx.com> です。 ダブルクォーテーションは、メールアドレスではなく、名前を囲む時に利用する規則になっています。 そのため、誤動作しているのだと思います。 今、仮に、メールアドレスが $$head{"FROM"} に、名前が $$head{"FROMNAME"} に入っているとすると、 $fromstr = ""; $fromstr = "\"$$head{ "FROMNAME" }\" " if ($$head{ "FROMNAME" }); $fromstr .= "<$$head{ "FROM" }>"; print OUTMAIL "From: $fromstr\n"; 例えば、この様な感じで動作すると思います。試してみて下さい。
- Dpop
- ベストアンサー率51% (279/544)
メールアドレスを指定するフォーマットが間違っていると思います。 メールアドレスを囲む必要がある場合には、 <taki@xxx.com> と指定します。名前を付ける場合には、 first last <taki@xxx.com> または、 "first last" <taki@xxx.com> とします。または、 taki@xxx.com (first last) でも良かった様な。。。ウル覚えであまり自信がありません。 メールアドレス部分を、この様なフォーマットとしてみて下さい。
お礼
アドバイスありがとうございます。 早速行ってみましたが、うまく動作しませんでした。 以下に補足を記述します。 FROMアドレスはユーザが自由に設定できます。 ユーザがFROMに"taki@xxx.com"と設定した場合、 システムでは、設定したアドレスをFromに設定してメール送信します。 Dpopさんから教わったように<"taki@xxx.com">と設定して メール送信しましたが、届いたメールは<"taki@xxx.com">@xxx.comと表示されました。 何か別な手段はありませんでしょうか? それとももともとFromアドレスに「"」を入れてはいけないのでしょうか?
お礼
アドバイスありがとうございます。 大変参考になりました。 お客さんと話してどうするか検討します。