• 締切済み

メール送信でFROMの表示が・・

メール送信にチャレンジしてますが、 なぜか、 受信メールのFromが メール差出人名@www754.sakura.ne.jpと受信表示さます。 (サーバーはさくらインターネットサーバー) @www754.sakura.ne.jpのサーバー情報がFROM欄に自動的に付加されるのですが、どうしてでしょうか? function sendMails($to,$sub,$msg,$from){ mb_internal_encoding("utf-8"); mb_language("Japanese"); $from = mb_encode_mimeheader($from, 'ISO-2022-JP'); $header = <<<EOM From: {$from} Return-Path: {$from} X-Mailer: mailform1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Mime-Version: 1.0 EOM; if(mb_send_mail ($to,$sub,$msg,$header)){ return true; }else{ return false; } }

  • PHP
  • 回答数3
  • ありがとう数1

みんなの回答

  • mpx
  • ベストアンサー率71% (149/209)
回答No.3

現れる症状は使用しているMTA(SMTPサーバ)に依存しますが 少なくともmime変換に問題があります。 【原因】 >> $from = mb_encode_mimeheader($from, 'ISO-2022-JP'); 上記の様に、全てをmime変換してしまってはメールアドレスまで 変換されてしまいMTAからは読めません。 そのため、MTAによってはメールアドレスが無いと判断してenvelope-from からFrom欄を補うか、サーバーのデフォルトドメインを@マーク以下に 付加するものが多いです。 【対策】 From欄は、日本語部分だけmime変換しましょう 例 $from="ほげほげ<hoge@example.com>"; $frommail = mb_ereg_replace(".*(<.*>)","\\1",$from); $fromj = mb_ereg_replace("(.*)<.*>","\\1",$from); $from = mb_encode_mimeheader($fromj,'ISO-2022-JP').$frommail;

midorin_h
質問者

お礼

ビンゴ!!すばらしいです。解決しました。 納得しました。ありがとうございました。感激です!

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

$fromにメールアドレスは含まれていますか? そうでなければメール転送エージェントが@以降を勝手に付与してるのでしょう。

midorin_h
質問者

補足

<$fromにメールアドレスは含まれていますか? 含んでいますけど 独自ドメインなので・・・@​www754.sakura.ne.jpは勝手に付加されてしまいます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>サーバー情報がFROM欄に自動的に付加されるのですが スパムなどの悪質な偽装を防ぐためです。

関連するQ&A

  • smtpでメール送信

    いつもお世話になっております。 mail()、mb_send_mail() が使用できないため、smtp から 直接メール送信をしようと考えております。 (なぜ、mail()、mb_send_mail() が使用できないのかはわかりません。) // 件名 $subject = mb_convert_encoding($subject, "JIS", "EUC-JP"); $subject = '=?iso-2022-jp?B?' . base64_encode($subject) . '?='; // 本文 $msg = mb_convert_encoding($msg, "JIS", "EUC-JP"); // 送信 $fp = fsockopen('localhost', 25, $err_str, $err_no, 5); $header = "From: " . $from . "\r\n"; $header .= "To: " . $to . "\r\n"; $header .= "Reply-To: " . $from . "\r\n"; $header .= "Subject: " . $subject . "\r\n"; $header .= "Mime-Version: 1.0\r\n"; $header .= "Content-Type: Text/Plain; charset=iso-2022-jp\r\n"; $header .= "Content-Transfer-Encoding: 7bit\r\n"; fputs($fp, "HELO " . $smtp . "\r\n" ); fputs($fp, "MAIL FROM:" . $from . "\r\n"); fputs($fp, "RCPT TO:" . $to . "\r\n"); fputs($fp, "DATA \r\n"); fputs($fp, $header . $msg . "\r\n.\r\n"); fputs($fp, "QUIT \r\n"); 上記のように書きました。 一回目は送信できるのですが、二回目以降が送信できません。 サーバを再起動するとまた送信できるようになるのですが、 二回目以降はやはり送信できません。 何か原因が考えられますでしょうか。 ご教示よろしくお願いいたします。

    • 締切済み
    • PHP
  • 画像の添付ファイルをメールで送信する

    頑張って、作ったけど、うまくいかないよぉ・・・ だれか、たすけてくださぃにゃん。 //メールのヘッダ $header = "Cc:$cc\n"; $header .= "From:$from\n"; $header .= "X-Mailer: PHP/".phpversion()."\n"; $header .= "MIME-version: 1.0\n"; if(file_exists($upfile)){ //アップファイルがあれば $header .= "Content-Type: multipart/mixed;\n"; $header .= "\tboundary=\"$boundary\"\n"; $msg .= "This is a multi-part message in MIME format.\n\n"; $msg .= "--$boundary\n"; $msg .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $msg .= "Content-Transfer-Encoding: 7bit\n\n"; }else{ $header .= "Content-Type: text/plain; charset=ISO-2022-JP\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; } $msg .= "本文だよ\n"; //ファイルの読み込み if(file_exists($photo1)){ $fp = fopen($photo1, "r") or die("error"); $contents = fread($fp, filesize($photo1)); fclose($fp); $f_encoded = chunk_split(base64_encode($contents)); //エンコードして分割 $msg .= "\n--$boundary\n"; $msg .= "Content-Type: " . $photo1_type . ";\n"; $msg .= "\tname=\"$photo1_name\"\n"; $msg .= "Content-Transfer-Encoding: base64\n"; $msg .= "Content-Disposition: attachment;\n"; $msg .= "\tfilename=\"$photo1_name\"\n\n"; $msg .= "$f_encoded\n"; } $msg .= "--$boundary--"; //メール送信を実行する mb_send_mail( $to, $subject, $msg, $header );

    • 締切済み
    • PHP
  • Gmailへのメール送信で文字化け

    PHPでフォームメールの作っているのですが、Gmailで送信したメールを受け取ると□□□□□というように文字化けが起こっていまいます。 アウトルック、ホットメールなどは大丈夫なのですが、グーグルのGmailだけ駄目なようです。なぜ文字化けするのでしょうか? mb_language("Ja"); $header = "From: reminder@aaa.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $header .= "Content-Transfer-Encoding: base64"; $to = "aaa@gmail.com"; $subject = "送信テスト"; $body = "本文テスト本文テスト"; $subject = base64_encode($subject); $subject = mb_convert_encoding($subject,"ISO-2022-JP"); $subject = "=?ISO-2022-JP?B?" . $subject . "=?="; $body = base64_encode($body); $body = mb_convert_encoding($body,"ISO-2022-JP"); $success = @mail($to,$subject,$body,$header); if($success) print "成功"; else print "失敗";

    • ベストアンサー
    • PHP
  • phpで送ったメールのヘッダーが本文にはみ出す

    表題のことでこまっております。 phpでメールフォームを作ったのですが、送ったメールをOutlookExpress(OE)で受信したときに、ヘッダーの一部が本文に表示されてしまいます。 OEで受信メールのプロパティを開くと下記のようになっております。 Return-Path: <xxx@xxx> Delivered-To: xxxxx_xxxxx@xxxx.xxx Received: (qmail 16291 invoked by uid 48); 1 Feb 2007 16:26:13 +0900 Date: 1 Feb 2007 16:26:13 +0900 Message-ID: <20070201072613.16290.qmail@xxxx.xxx> To: yyyyy@yyyy.yyy Subject: =?iso-2022-jp?B? From: zzz@zzzz.zzz X-Mailer: ContactForm MIME-Version: 1.0 Content-Type: text/plain;charset=ISO-2022-JP Content-Transfer-Encoding: base64 本文にはみ出るのは最後の3行(MIME~base64)です。 原因は空行が入っているためだと思いますが、OEのメールソースでは空行はありません。 プログラムのソースは $header ="From: $from\r\n"; $header ="CC: $cc\r\n"; $header .= "X-Mailer: $mailer\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $replyheader .= "Content-Transfer-Encoding: base64\r\n"; $Subject='=?iso-2022-jp?B?'.base64_encode(mb_convert_encoding($Subject,'JIS','SJIS')).'?='; @mail($from,$Subject,$Message,$header); hotmailなどのwebメーラーで見たときにははみ出していません。 これはなぜでしょうか?宜しくお願いします。

    • ベストアンサー
    • PHP
  • メールの文字化け

    define( 'CNST_MAIL_REPLY' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_FROM_ADDR' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_ERROR' , 'aaa@aaa.co.jp' ); define( 'CNST_MAIL_FROM_NAME' , 'ここが、差出人で、日本語表示したいんですが文字化け' ); define( 'CNST_MAIL_TO_ADDR' , 'aaa@aaa.co.jp' ); //* メールアドレス設定 *// $mail_header = ""; if ( CNST_MAIL_REPLY != "") { if ( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= "Reply-To: ".CNST_MAIL_REPLY; } $from = "From: "; if ( CNST_MAIL_FROM_NAME != "") { $from .= "\"".CNST_MAIL_FROM_NAME."\""; } if ( CNST_MAIL_FROM_ADDR != "") { $from .= " <".CNST_MAIL_FROM_ADDR.">"; } if ( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= $from; if( CNST_MAIL_ERROR != "") { $errors_to = "Errors-To: "; $errors_to .= CNST_MAIL_ERROR; if( $mail_header != "") { $mail_header .= "\n"; } $mail_header .= $errors_to; $sub_parm = "-f".CNST_MAIL_ERROR; $mail_subject = mb_convert_encoding($mail_subject, "ISO-2022-JP","SJIS"); $mail_text = mb_convert_encoding($mail_text, "ISO-2022-JP","SJIS"); $mail_header = mb_convert_encoding($mail_header,"ISO-2022-JP","SJIS"); // メール送信処理 mb_language("Japanese"); mb_send_mail($to, $mail_subject, $mail_text, $mail_header, $sub_parm); 上のメール送信プログラムなんですが、 差出人の名前が文字化けしてしまいます。 質問のしかたがよくわからなかったのでプログラムをのせました。 アドバイス宜しくお願いします。

    • ベストアンサー
    • PHP
  • mail()でメール送信で、特定のメーラーの受信のみ件名が文字化け

    PHPでメール配信プログラムを作っております。 配信テストを行なったのですが、特定のメーラーで件名が文字化けしてしまう現象に見舞われしてしまい、対処法を探しております。 ■テストメーラー 1、OutlookExpress 2、EdMax 3、Thunderbird ■ソース(一部抜粋) mb_language('Japanese'); mb_internal_encoding("SJIS"); //1 $subject = mb_encode_mimeheader($subject); //2 $subject = mb_convert_encoding($subject,"JIS","SJIS"); $send_body = mb_convert_encoding($send_body,"JIS","SJIS"); $header = "From: $fronmail.\n"; $header .= "Return-path: $return\n"; $header .= "Reply-To: $fronmail.\n"; //3 $header .= "Subject: $subject\n"; $header .= "Message-ID: {$MessageID}\n"; $header .= "MIME-Version: 1.0\n"; $header .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $header .= "Content-Transfer-Encoding: 7bit\n"; //4 $header .= "Content-Transfer-Encoding: base64\n"; $header .= "X-Mailer:PHP/".phpversion(); $chk_mail = mail($to_email,$subject,$send_body,$header); ■設定値 $body = $subject = "日本語テスト"; メールアドレスはプロバイダなどが発行しているもの ■現象 ソースのままだと1、2は件名は文字化けせず、3は文字化け(???{????? ※?はひし形に囲まれた?です)します。 それぞれコメントアウトを外したり切り替えたりするのですが、1、2も件名が文字化けになったりします。 3は基本的にどのコメントアウトを有効にしても文字化けのままです。 $subjectに関しては、mail関数のものが優先のようでして、試しに空にしてみたのですが、件名も空のままでした。 何故この形式を取っているかというと、半角カナを使いたいが為でして、mb_send_mailだと半角カナが使えなかったような気がしてmailを使っております。 あと、popenで直接コマンドを打つという手もありそうですが、sendmailではなくpostfixなのですがpostfixでコマンドをという手段を探した方が良いのでしょうか? 出来ればmailを使って文字化けもしない方向を希望なのですが、それが駄目なら他の手段など誘導していただければ幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで、HTMLメールの際のエラー

    HTMLメールを送る下記スクリプトにおきまして、管理人宛てのメール本文を 見ると、添付画像のように、生のHTML文のついたメールが届いてしまいます。 普通のHTMLメールにするには、どこがどう間違っているのか、ご指導いただき たいです。 ちなみにサーバーはさくらサーバーです。 --------------------------------------------------------------------------------------------------------------- ////////////////////////////////////////// // 新着口コミを管理人にメールで知らせる // ////////////////////////////////////////// $to = "~"; // 管理人宛て $mail_title = " ユーザーが新着口コミを投稿しました。"; $header = "From: ~ Content-Type:text/html; charset=ISO-2022-JP Content-Transfer-Encoding:8bit "; //$uniqid = uniqid(); $to = mb_convert_encoding($to, "UTF-8", "auto"); // $toは、自動的にエンコードされない。 $mail_title = mb_convert_encoding($mail_title, "UTF-8", "auto");    $html_header = '<!DOCTYPE html"><html><meta http-equiv="Content-Type" content="text/html; charset=ISO-2022-JP"></head><body bgcolor="#FFFFCC">';    $html_footer = '</body></html>'; $comment_header = $username." 様\n\n口コミ店舗名:".$shopname."\n\n"; $comment = $html_header."\n\n".$comment_header.$comment."\n\n"; // $comment = str_replace("<br>", "\n", $comment); // $comment = mb_convert_encoding($comment, "UTF-8", "auto"); $comment_anchor = "<a href=\"http://~.com/tokyo/admin/kuchikomi_edit.php?title=".$title."&comment=".$comment_copy."&username=".$username."&shopname=".$shopname."\">口コミ編集</a>"; $comment_anchor = mb_convert_variables($comment_anchor, "UTF-8", $title, $comment_copy, $username, $shopname); $comment = $comment."\n\n".$comment_anchor.$html_footer; $comment = mb_convert_encoding($comment, "UTF-8", "auto"); $header = mb_convert_encoding($header, "UTF-8", "auto"); mb_send_mail($to, $mail_title, $comment, $header); // メール送信

    • ベストアンサー
    • PHP
  • UTF8コードでのメール送信

    現在、以下の内容でメールサーバおよびシステムを運用してます。 レンタルサーバを以下の内容で OS:FreeBsd DB:postgresql (eucコードで運用) PG:perl5.8.8  (eucコードで記述) 最近、当システムから携帯電話(スマートフォン含む)へのメール送信で受信側(携帯)で文字化けが多くなっている。それで、システムの一部のUTF8化しようと思いました。それで、メール送信のライブラリを以下のように修正してみたが、本文が文字化けしてしまいます。なぜ文字するか原因がわかりません。 以下のソースはUTF8Nで記述しています。 ※システム全部をUTF8コード化やDB(POSTGRESQL)もUTF8にする案もありますが、 改修作業が大きくて作業時間が少ない方法も模索しています。 どなたかご教授願います。 binmode(STDOUT, ":utf8"); use Encode; use Encode qw(from_to); use MIME::Base64; use MIME::Entity; use Net::SMTP; use MIME::Words qw (:all); sub sendmail() { my ($mail_date) = @_; <==メールのハッシュ配列(DBに登録されているメールの件名、本文) my $smtp_server = $mail_date->{SMTPsrv}; my $smtp_port = '25'; # 送信者のメールアドレスを設定する。 my $mail_from = $mail_date->{MailFr}; # 宛先のメールアドレスを設定する。 my $mail_to = $mail_date->{MailTo}; # メールの件名を設定する。 from_to($mail_date->{Subjct},"euc-jp","utf8"); #UTF8に変換 $utf8_str_sub = $mail_date->{Subjct}; # メールの内容を設定する。 my $message; my $utf8_str; from_to($mail_date->{Message},"euc-jp","utf8"); #UTF8に変換 $message = $mail_date->{Message}; $utf8_str = $message; # メールヘッダを作成する。 # from、to、件名共にMIME-Header(UTF-8)へエンコードします。 my $mail_header; $mail_header = "From: " .encode('MIME-Header-ISO_2022_JP',$mail_from)."\n"; $mail_header .= "To: " .encode('MIME-Header-ISO_2022_JP',$mail_to) ."\n"; $mail_header .= "Subject: ".encode('MIME-Header-ISO_2022_JP',$utf8_str_sub) ."\n"; # UTF-8とbase64 encodeを使う事を明記します。 $mail_header .= "MIME-Version: 1.0\n"; $mail_header .= "Content-type: text/plain; charset=utf-8\n"; $mail_header .= "Content-Transfer-Encoding: base64\n"; $mail_header .= "\n"; # SMTPでメールを送る。 my $SMTP = Net::SMTP->new($smtp_server,Port=>$smtp_port); $SMTP->mail($mail_from); $SMTP->to($mail_to); $SMTP->data(); $SMTP->datasend($mail_header); $SMTP->datasend(encode_base64(encode('utf8', $utf8_str))); $SMTP->dataend(); $SMTP->quit; }

  • メール送信プログラムのFrom:について

    <?php $to="mail@xx.com"; $subject="php test"; $message="phpのテスト"; $header="From:". mb_encode_mimeheader("名前") . "<mail@xx.com>"; mb_send_mail($to, $subject, $message, $header); ?> 送信者名に名前を入れたいのですが、プログラムがまずいようで、何がいけないのでしょうか?

    • ベストアンサー
    • PHP
  • 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