• 締切済み

メールヘッダーの解析について

お疲れ様です。 お世話になっています。 今空メールのシステムを作っていて、Fromの取得について困っています。 今まではstdinで1行ごと取得して、FROMで始まる行の<>の中みを取得というやりかたをしていたのですが、とあるメールサーバーからくるメールが FROM: =?MIME_ENCODE?= <test@example.com> と2行になっていて、取得に失敗していました。 なので1行ずつ取得をやめて、 ヘッダーのFROM:から次の内容までを1要素とした配列が作れればいいなと思い、今取り組んでいる状態です。 つまり、 FROM: =?MIME_ENCODE?= <test@example.com> RETURN_PATH:<test@example.com> SUBJECT:=?MIME_ENCODE?= があれば、 $header['FROM']="=?MIME_ENCODE?= <test@example.com>"; $header['RETURN_PATH']="<test@example.com>"; $header['SUBJECT']="=?MIME_ENCODE?="; としたいということです。 うまくこの形に収めるためには正規表現が必要だと思うのですが、 別の方法でもこの形に収めるにはどうしたらよいでしょうか。 よろしくお願いします。

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

みんなの回答

回答No.1

電子メールの規約ではヘッダーにおいて行頭にスペース等の空白文字が有る場合は空白文字をセパレーターとした前の行の続きであると決まっています。 ですから処理前に次の行の行頭を調べて空白文字がある場合は連結する処理を行えば今までの方法でうまくいくとおもいます。

nyalio
質問者

お礼

回答ありがとうございます。 なるほど。そんなキマリがあったのですね! やってみます。

関連するQ&A

  • メールヘッダーについて

    perl5.8で メール送信した場合は、以下は必ず ASCII文字ということでしょうか? From, To, Bcc, Replay-To, Return-Path もし日本語が含まれていた場合の書式は以下のようになるということでしょうか? メールヘッダーにはJISに変換するだけでOK?でしょうか? MIMEにする必要があるのでしょうか? 日本語含まれる<test@example.com> <=== JISに変換するだけでOK?

    • ベストアンサー
    • Perl
  • 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
  • Mail::Sendmailの使い方

    お世話になっております。 先日よりsendmailの調子がおかしくていろいろ調べているのですが煮詰まってしまったので詳しい方々にご教授頂きたいと思います。 先日よりMovable Type(CMS)でのメール送信のシステムが機能しなくなり、いろいろ調べているとサーバーのsendmailはきちんと機能しているのですが、perlのモジュールMail::Sendmailがうまく作動していないようなのです。 perlでは、 open (SENDMAIL, "/usr/lib/sendmail -t -i"); (中省略) close(SENDMAIL); という原始的な方法ではメールが送信されるのですが、 use Mail::Sendmail;という使い方では、エラーにはなりませんがずっと読み込み中…状態が続いてメールが送信されませんでした。 Movable TypeでもMail::Sendmailが利用されていますのでここが原因かと思いますが、Mail::Sendmailを使用するにあたって注意すべきこと、または設定すべきことはどのようなことがあるでしょうか?さしあたりどこをチェックしてよいのかわからなくて困っています。 よろしくお願いします。 Mail::Sendmailを利用して作成したスクリプトは以下のようなものです。 #!/usr/bin/perl use strict; use warnings; use Mail::Sendmail; use Encode; use utf8; my $subject = "テスト"; my $message = "テストです。ほげほげ。"; $subject = encode("MIME-Header-ISO_2022_JP", $subject); $message = encode("iso-2022-jp", $message); my %mail = ( "Content-Type" => 'text/plain; charset="iso-2022-jp"', To => 'to@example.com', From => 'from@example.com', Subject => $subject, Message => $message, ); sendmail(%mail); exit;

    • ベストアンサー
    • Perl
  • Outlook 2007 (試用版)でメールのヘッダを見る方法は?

    表題のとおりなのですが、 Outlook 2007 (試用版)でメールのヘッダを見る方法がわからず、 悩んでいます。 なお、ここでヘッダと言っているのは、 差出人:・・・ 宛先:・・・ というヘッダではなくて、 以下のようなものです。 ======================================== Delivered-To: example@example.com ・・・(中略)・・・ Received: (qmail **** invoked by uid ***); 17 Jan 2007 **:**:** +0900 Date: 17 Jan 2007 **:**:** +0900 Message-ID: <example@example.com> To: example@example.com Subject: hogehoge Reply-To: example@example.com From: fugafuga <example@example.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit ======================================== Outlook2003の場合はわかったのですが、 2007になってインターフェースが結構変わってしまい、 わからなくなってしまいました。 よろしくお願いします。

  • メール送信プログラムの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
  • 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
  • 日本語を含むメールヘッダ

    日本語を含むメールヘッダ メール送信時に、日本語などマルチバイト文字をSubjectなどに含めたい場合はMIME、BASE64エンコードしますが、このときの文字数/行の制限に疑問があります。 RFCを見ると1行あたり76文字とされていますが、様々なサンプルや配布スクリプトなどのソースを見ても、それが考慮されていないのです。 たとえばPerlの場合、JcodeやMIME::Base64などを使ってエンコードした文字列を、以下のように使用しているパターンが多いです。 $subject = $jcode->set($subject)->mime_encode; open(MAIL, "| $sendmail"); print MAIL (Fromなど出力) print MAIL "Subject: $subject\n"; print MAIL (その他のフィールド出力) これでは「Subject: 」という文字列の分だけ76文字を超える可能性があると思うのですが…。つまり「Subject: 」も含めてエンコードルーチンに渡さなければいけないと思うのです。 単なるバグかと思ったのですが、結構多くのサンプルなどを見ても同様で、何か理由があるのでしょうか。あるいは本来の手段があるのでしょうか。 そもそも「1行あたり76文字」というのは、フィールド名を含めないのでしょうか。 また、エンコードしない場合の、つまりASCII文字のみの場合の行あたりの文字数制限について、RFCにて見つからなかったのですが、情報や文書番号などご教授いただければ助かります。 よろしくお願いいたします。

  • phpのmb_send_mailで携帯のみ文字化け

    PHPのmb_send_mail関数でメールを送信しています。 メールサーバーはGoogleAppsのを使っています PHPのバージョンは5.1.6 --- 下記ソース --- //日本語と内部文字エンコードの指定 mb_language('ja'); mb_internal_encoding('UTF-8'); $parameter = "-f hoge@example.co.jp";//return_path設定 // ↓コレだと携帯では文字化けしないが、Gmailへ送信すると文字化け //$subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $header = ""; $header .= "From: {$subject}<{$from}>"; $message = str_replace("\r", "", $message); $res = mb_send_mail($to, $subject, $message, $header, $parameter);

    • ベストアンサー
    • PHP
  • mail関数を使った場合のReturn-Pathは?

    Apache 1.3.33 PHP Version 4.4.1 $header = "From:".$_from; $header .= "Return-Path:".$_from; のようにヘッダー部を設定し、mail関数を使っています。 $result = mail($_email, $subject, $message, $header); しかし、Return-Pathが反映されていないようで、 メールが届かない場合などの、 「failure notice」メールが Apache側で設定されているメールアドレスに 送信されてしまいます。 どのように設定すればよろしいのでしょうか? またパラメータを使って $header = "From:".$_from; $para ="-f".$_from; $result = mail($_email, $subject, $message, $header,$para) 上記のように記述してみたのですが、だめでした。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpからのメール送信

    サーバにはpostfix/phpがインストールされており mb_send_mail関数を使ってメールを送信しております。 example.comというドメインを例として説明すると fromがtest@example.comというメールアドレスでは問題なく送ることができるのですが、 ドメインをexample.com→mail.example.comと変更し、test@mail.example.comというアドレスで送ろうとすると maillog上はtest@mail.example.comから送っていることになっているのですが、 メーラーで受信するとformがtest@example.comになっております。 サブドメインのmail.example.comから送るようにするにはどのようにしたらよろしいでしょうか? main.cf virtual_alias_domains=example.com mail.example.com virtual_alias_maps = hash:/etc/mail/virtual /etc/mail/virtual test@example.com test test@mail.example.com test

専門家に質問してみよう