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

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

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

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

Q&A

2回答

3019閲覧

phpメール SMTP認証を行わずにmb_send_mail()

taka211

総合スコア17

PHP

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

0グッド

0クリップ

投稿2021/05/10 12:52

前提・実現したいこと

mb_send_mail()で指定したメールアドレスを差出人としてメールを送りたいのですが、メールサーバSMTP認証をしないと行えないのでしょうか。
以下のコードを実行したところ、上手くいかず調べてみたのですが中々資料が見つからなかったです。

メールアドレスが間違っている可能性があるという記事もありましたが、文字化けしてしまっているのでしょうか。メールアドレスはDBから取得しているのですが、..等の文字が続いた李などはありません。

発生している問題・エラーメッセージ

php

1mb_send_mail(): SMTP server response: 501 5.1.7 Invalid address [TY1PR01CA0180.jpnprd01.prod.outlook.com]

該当のソースコード

php

1 2 $headers = "From:" . $address . 3 "MIME-Version: 1.0\r\n" 4 . "Content-Transfer-Encoding: 7bit\r\n" 5 . "Content-Type: text/html; charset=UTF-8"; 6 7 mb_send_mail($a_address, $title, $a_text, $headers);

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

すでに調べたかもしれませんが、"501 Invalid address"でググると色々な情報がでてきますね。Invalid addressですから、メールアドレスが間違ってると判断されているようです。

参考)
https://sendgrid.kke.co.jp/docs/User_Manual_JP/Suppressions/invalid_emails.html

マイクロソフトのサーバの場合に多いようです(RFCに厳格?) まずは切り分けとして別のメールアドレス(outlook.com以外)で試してみたりするとどうでしょう?

それ以外だと

  • @の手前を""で囲うと解決した
  • Return-PathとFromを一致させる(FromだけじゃだめでReturn-Pathも求められる)

という情報も散見されました。

実際にはこれだけですべてのユーザにメールが届くようになるかというとおそらく微妙で、SPFとDKIMの設定もおそらく必須になるかと思います。

参考)
https://qiita.com/f_uto/items/aa8a3ab915fb09b97256

運用も含めるとけっこう面倒なので他のMTAを使ったり、SendGridやmailgunとか外部サービスを使った方が楽かもしれません。

投稿2021/05/10 15:26

編集2021/05/11 01:34
AbeTakashi

総合スコア4853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka211

2021/05/10 23:00

ご回答ありがとうございます 自分もそういった解決策のものもみました。 実は今回の差出人メールアドレスはDBから取りだし、ドメインは不特定なのですが、 それで実装は現実的ではないですよね?
AbeTakashi

2021/05/11 01:28

すべてのドメインでエラーがでるということでしょうか? とりあえずエラーの原因の切り分けとしてoutlook.com以外のメールアドレスに送信してどうなるかという情報がほしいです。すべてのドメインに送っても同じであれば、あきらかに送信方法が間違ってる、そうでなければoutlook.comの厳密なチェックに引っかかってるということになると思います。 実装が現実的かどうかは提示されている情報だけでは分かりかねますが、個人的にはメールの到達性を考えるとこの問題を解決したところで・・・という感じを受けます。実際にSPFもDKIMも対応してないメールは全然相手に届かないことが多いです(SPFだけでしのいでるメールは今もよく見ますが)。これらを対応しようとするとqiitaの記事にあるような対応が必要なんですが、ここまでやるならmailgunを使いますね。有料ではありますが、たいした金額ではありません。サーバの管理コストよりは間違いなく安いです。
taka211

2021/05/12 05:30

すみません、おそらくローカル環境で行おうとしてたためでした。 別サーバ上で動かしたところ、送れました。 おっしゃる通り、相手に届かないといったケースは多発すると考えられますね。 mailgun、検討してみます。 貴重なご意見ありがとうございました。
guest

0

mb_send_mail()やmail()は
古典的なsendmail越しにメール送信を行う関数です。

GmailやOutlookなど、モダンなメールサービス越しにメール送信するには、
それなりの方法を実装しないといけないかと。

Outlook REST API の概要 - Outlook Developer | Microsoft Docs

これが参考になるんじゃないでしょうか。
(私は触ったことがないので、どう使えばいいのかなど具体的なアドバイスはできかねます。)

投稿2021/05/10 14:39

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka211

2021/05/10 22:54

やや複雑ですね。 ご回答ありがとうこざいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問