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

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

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

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

CakePHP

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

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

1回答

908閲覧

[cake2]メールsend時にエラーが起きた場合、専用のメアドに送信したい

momolength

総合スコア62

PHP

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

CakePHP

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

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2021/07/13 01:27

編集2021/07/13 01:30
$email = new CakeEmail('default'); --> ここでtoやfrom、本文(template)などを指定 <--

最後に

return $email->send();

しています。
send()は、lib\Cake\Network\Email\CakeEmail.php にあり、

public function send($content = null) { if (empty($this->_from)) { throw new SocketException(__d('cake_dev', 'From is not specified.')); } if (empty($this->_to) && empty($this->_cc) && empty($this->_bcc)) { throw new SocketException(__d('cake_dev', 'You need to specify at least one destination for to, cc or bcc.')); } if (is_array($content)) { $content = implode("\n", $content) . "\n"; } $this->_message = $this->_render($this->_wrap($content)); $contents = $this->transportClass()->send($this); if (!empty($this->_config['log'])) { $config = array( 'level' => LOG_DEBUG, 'scope' => 'email' ); if ($this->_config['log'] !== true) { if (!is_array($this->_config['log'])) { $this->_config['log'] = array('level' => $this->_config['log']); } $config = $this->_config['log'] + $config; } CakeLog::write( $config['level'], PHP_EOL . $contents['headers'] . PHP_EOL . $contents['message'], $config['scope'] ); } return $contents; }

こうなっています。
なんやかんやで一応処理はしているようなので、

$email = new CakeEmail('default'); Try { return $email->send(); }catch(Exception $e{ --> ここでエラー時用のtoやfrom、本文(template)などを指定 <-- }

Q1
これで問題ないですか?何か懸念点がありますか?
単純にsendされたときにエラーが起きれば、で判定したいのでsendをtryで括ったんですが。

Q2
また、
https://norm-nois.com/blog/archives/2865
このサイトに書いてあることはどういった場合に有効なんでしょうか?
私のやり方とどう違いますか?

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

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

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

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

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

guest

回答1

0

CakePHP知らないけどメール周りのお話として、一言二言。

SMTPサーバーと直接通信してメール送信できるもののようですが、
あくまでSMTPサーバーにメールを渡すだけなので、
何らかの事情でメールが最終的に届けられなくて戻ってきたときまでは対処できないでしょうね。

エラーメールの戻り先で別途ソリューションを検討する必要があるのではないかと。。

それで、質問文中に記載のある記事では、Return-Pathヘッダを追加して、
最終的に届けられなくて戻ってきたときの返送先を指定するという意味。

メールは壮大なバケツリレーなので、
バケツを渡した(メールを送信した)あとのことは感知できない仕組み。
エラーメールとして戻ってくるようにして、
戻り先メールボックスを監視して不達メールに対する何らかのアクションを取らないといけないでしょうね。
(具体例を例えば、パスワード再発行をメール越しにやる時、相手に届かないとどうするとか。)

投稿2021/07/13 02:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

momolength

2021/07/13 02:29

なるほどありがとうございます。 >最終的に届けられなくて戻ってきたときの返送先を指定するという意味。 これは、send()をtry catchするのと何が違いますか? sendした後の...どこですか?
退会済みユーザー

退会済みユーザー

2021/07/13 03:02 編集

メール送信としてSMTPサーバーとの通信が成功してメールを渡すことができさえすれば、処理自体は成功として流れていきます。 その時点ではエラーにならない。catchもしない。 送り先メールボックスがキャパオーバーだったり、あるいはメールのユーザー自体存在しなかったりするとメールが戻されるのですが、 そういうことを想定しましょうよっていうお話です。 話、通じてますか?
momolength

2021/07/13 02:54

Q1でも問題はないが、その後のことまでカバーするにはReturn-Pathを使おうねってことですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問