質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • PHP

    20326questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Postfix

    266questions

    Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

  • Dovecot

    69questions

    Dovecotとは、POPやIMAPサーバーを提供するMDA(メール配送エージェント)の一つです。

【PHP】Gmailから送信されたヘッダのFromにアドレスがない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 527

TatsuyaMaeda

score 2

前提・実現したいこと

ユーザに空メールを送ってもらい会員登録を行う機能をPHPで開発しています。

送られてきたメールをパースしてメールアドレスを取得したいのですが、
しかしGmailから送られてきたメールの場合、
取得したヘッダー情報にGoogleアカウト名しか記載されていないという状況で対応に困っています。

WEBMINからlocalに保存されているメールのヘッダー情報を見ると、
From: hoge hoge <hoge@xxxxcom>
のようにFromアドレスが含まれています。

PHPでメールのヘッダー情報を取得する辺りで問題が発生しているような気がするのですが…。

今のところ、Gmail以外のメールアドレスから送られてきたアドレスについては正常に取得できています。

何卒お力添え頂けないでしょうか。

例)取得したヘッダー情報の一部

Return-Path:
X-Original-To:entry@xxxx.com
Delivered-To: entry@xxxx.com
Received: from mail-xxxxx.google.com (mail-xxxx.google.com [xxx.xx.xxx.xxx]) by mail.xxxx.jp (Postfix) with ESMTP id xxxxxxxx for ; Thu, 16 Feb 2017 12:47:38 +0900 (JST) 
Received: by mail-xxxx.google.com with SMTP id xxxxxx for ;
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:

From: hoge hoge  ←(Googleアカウント名しか記載されていない)

Subject: TEST
To: xxxx
Content-Type: multipart/alternative;

ヘッダー情報を取得する箇所のソースコード

        $account = array( 
          'host' => 'localhost', 
          'port' => '110', 
          'username' => 'username', 
          'password' => 'password', 
        ); 

        $pop3 =& new Net_POP3(); 
        $pop3->connect($account['host'], $account['port']); 
        $pop3->login($account['username'], $account['password']); 
        $n_msg = $pop3->numMsg(); 
        $header_list = $pop3->getParsedHeaders($n_msg); 
        $body = mb_convert_encoding($pop3->getBody($n_msg), "euc-jp", "jis"); 
        $body = htmlspecialchars($body, ENT_QUOTES, "euc-jp"); 
        $pop3->disconnect(); 

        $from = mb_decode_mimeheader($header_list['From']); 

//        var_dump($header_list)."<hr>";

追記

imap_open()でヘッダーを取得してみましたが、取得出来た内容は同一でした。

#imap_open
$mbox = imap_open("{localhost:110/pop3/notls}INBOX", "user", "pass");
echo imap_fetchheader($mbox,1);
imap_close($mbox);
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kunai

    2017/02/16 13:50

    Gmailアカウントでメール送ってみましたが、ちゃんとFromにメアド入ってました。ヘッダ情報を取得している処理部分に問題があるのではないでしょうか。その部分のソースコード提示いただけますか?

    キャンセル

  • TatsuyaMaeda

    2017/02/16 14:19

    回答ありがとうございます。該当箇所のソースコードを追記させていただきました。やはり取得の処理に問題がありそうですね…。

    キャンセル

  • kunai

    2017/02/16 15:08

    echo htmlspecialchars(var_export($header_list, true))."<hr>"; で、中身を見てみたらどうでしょう。

    キャンセル

  • TatsuyaMaeda

    2017/02/16 15:38

    上記を試してみましたが、From: hoge hoge ←送信者のGoogleアカウント名のみ表示されました。 今のところGmailのみ発生するのがヒントになりそうなのですが…

    キャンセル

回答 2

check解決した方法

0

力技ですが、自己解決致しました。

結論からいうと、
mail -f ~/Maildir コマンドを叩いてメール全文を表示するシェルスクリプトを用意し、
PHPからshell_exec()する
という方法です。

なぜこのような症状が発生したのか、原因がまったく分からないのが非常に気持ち悪いですが…。
これ以上時間を使うことができないので、しばらくこの方法で行こうと思います。

ご回答頂いた方々、ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

From: hoge hoge <hoge@xxxxcom>


というように、メールアドレスが<>で括られていますが、そのあたりの文字は適切に処理されてないのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/16 15:43

    ご回答いただきありがとうございます。
    <>の処理の辺りで探ってみました。
    まず現状では<>の箇所がそもそも取得できていない状況(パース前のヘッダー情報にもメアドの記載なし)で、取得方法に問題があるような気がしているのですが…。

    NET POP3を使わずにfsockopen() とfgets() でヘッダー情報を取得して見ましたが、取得できたヘッダー情報は同一でした。

    こういったケースの場合、どのような原因が考えられるでしょうか。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20326questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Postfix

    266questions

    Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

  • Dovecot

    69questions

    Dovecotとは、POPやIMAPサーバーを提供するMDA(メール配送エージェント)の一つです。