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

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

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

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

1930閲覧

cakephpでRFC違反のアドレスへ送信した時の挙動をテストしたい

退会済みユーザー

退会済みユーザー

総合スコア0

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2020/04/13 08:50

前提・実現したいこと

メーラーを利用して送信している通知で、RFC違反のメールアドレスにも対応できるよう変更して欲しいと言われ、現状把握のためテストをしています

以下の方法で確認をし、コード的にはRFC違反のアドレスにも送信処理が走ると思ったのですがこの見立ては正しいでしょうか?

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

修正前に挙動を確認したいと思いローカルで以下のようにデバックしてみたのですが、特にエラーらしいエラーが出ませんでした
規約違反ではないアドレスと同じ結果が表示されました

$ bin/cake console >>> use Cake\Mailer\Mailer; >>> use Cake\Mailer\Email; >>> Email::deliver('myname+you......@mycompany.co.jp', 'Subject', 'Message', ['from' => 'myname+me@mycompany.co.jp']); => Cake\Mailer\Email {#246 +charset: "UTF-8", +headerCharset: "UTF-8", +viewClass: null, +viewVars: [], }

該当のソースコード

メール送信のコード
src/Controller/Component/MailComponent.php

public function sendMailConfirm($club, $change) { if ($this->_isSend && !empty($change->mail)) $this->getMailer('Customer')->send('mail_confirm', [$club, $change]); }

src/Mailer/CustomerMailer.php

/** * メルアド設定 or 変更 */ public function mail_confirm($club, $change) { $from = Configure::read('Mailer.From'); $to = $change->mail; $this ->from($from) ->to($to) ->subject('PINコード送信') ->template('mail_confirm', 'default') ->set(['pin_code' => $change->pin_code]); }

メールアドレスのチェック
vendor/cakephp/cakephp/src/Mailer/Email.php

。。。 const EMAIL_PATTERN = '/^((?:[\p{L}0-9.!#$%&\'*+/=?^_`{|}~-]+)*@[\p{L}0-9-._]+)$/ui'; 。。。。 protected $_emailPattern = self::EMAIL_PATTERN; 。。。 public function reset() { $this->_to = []; $this->_from = []; $this->_sender = []; $this->_replyTo = []; $this->_readReceipt = []; $this->_returnPath = []; $this->_cc = []; $this->_bcc = []; $this->_messageId = true; $this->_subject = ''; $this->_headers = []; $this->_textMessage = ''; $this->_htmlMessage = ''; $this->_message = ''; $this->_emailFormat = 'text'; $this->_transport = null; $this->_priority = null; $this->charset = 'utf-8'; $this->headerCharset = null; $this->_attachments = []; $this->_profile = []; $this->_emailPattern = self::EMAIL_PATTERN; $this->viewBuilder()->setLayout('default'); $this->viewBuilder()->setTemplate(''); $this->viewBuilder()->setClassName('Cake\View\View'); $this->viewVars = []; $this->viewBuilder()->setTheme(false); $this->viewBuilder()->setHelpers(['Html'], false); return $this; }

わからないこと

RFC違反のアドレスであっても、バリデーションには引っかからずに送信ができているコードであると思ったのですがそれを確認するために上記の方法は間違っているでしょうか?また、送れるという見立てそのものはどうでしょうか?

実際に送信することができているかどうかは、メールに専用のURLを貼ってそこにアクセスがあるかどうか以外で何か確認する方法はあるでしょうか?

もし送信ができていない場合、送信に利用するものをPHPのメール関数ではなくSMTPサーバーなど他の手段に切り替えれば送信できる可能性がありますでしょうか?

根本的に理解が間違っていて的外れな部分があるかもしれません
もし何か木になることがありましたらご指摘いただければと思います
よろしくお願いします

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

cakephp3.5
PHP7

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

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

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

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

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

guest

回答1

0

ベストアンサー

CakePHPのEmailクラスにおいて、メールアドレスのチェックを行うのはsetFrom, setToなどメソッドでメールアドレスをセットしようとしたときです。

期待する正規表現(デフォルトでは、Email::EMAIL_PATTERNで定義されているもの) に一致しない場合にはInvalidArgumentExceptionが発生します。

投稿2020/04/16 07:29

編集2020/04/16 07:31
nojimage

総合スコア959

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問