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

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

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

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

メール

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

Q&A

解決済

2回答

4248閲覧

cakePHP3でレンタルサーバ:ロリポップからメールを送信する

en2019joy

総合スコア13

CakePHP

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

メール

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

0グッド

0クリップ

投稿2019/03/08 06:16

やりたいこと

cakePHP3からメールを送信したい。
その際にレンタルサーバ:ロリポップのメールアドレスからメールを送信したい。

試してみた設定

config/app.php

1 2 'EmailTransport' => [ 3 'default' => [ 4 'className' => 'Smtp', 5 /* 6 * The following keys are used in SMTP transports: 7 */ 8 'host' => 'smtp.lolipop.jp', 9 'port' => 指定されたポート, 10 'timeout' => 10, 11 'username' => '作成したメールアドレス', 12 'password' => 'パスワード', 13 'transport' => 'Smtp', 14 'client' => null, 15 'tls' => null, 16 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), 17 ], 18 ],

PHP

1 2 $sendEmail = new Email('default'); 3 4 $sendEmail->setFrom(['fromメールアドレス' => '表示名']) 5 ->setTo('送り先') 6 ->setBcc('BCC送り先') 7 ->setSubject('タイトル') 8 ->send('本文');

困っていること

上記設定でやると

SMTP timeout.
Cake\Network\Exception\SocketException

とタイムアウトになって接続できません。

設定が間違っているのか
セキュリティではじかれているのか
原因がわかりません。

Gmailの設定方法はネットに出ていたのですが
ロリポップの場合は調べきれませんでした。

http://k01ken.hatenablog.com/entry/2018/05/28/014720

を見たのですが
'className' => 'Mail'
はPHPの mail()関数を使用してメールを送信するようなので
ロリポップのSMTPサーバからメールを送信したい今回には合いませんでした。

ご教授お願いいたします。

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

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

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

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

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

guest

回答2

0

自己解決

PHP

1 'EmailTransport' => [ 2 'default' => [ 3 'className' => 'Smtp', 4 /* 5 * The following keys are used in SMTP transports: 6 */ 7 'host' => 'ssl://smtp.lolipop.jp', 8 'port' => ポート, 9 'timeout' => 10, 10 'username' => '作成したメールアドレス', 11 'password' => '作成したメールアドレスのパスワード', 12 // 'transport' => 'Smtp', 13 'client' => null, 14 'secure' => 'ssl', 15 'tls' => false, 16 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), 17 ], 18 ], 19
  • 'host'に「ssl://」を追加。
  • 'secure' => 'ssl'を追加。
  • 'tls' => falseに変更。

の設定にしたところ、
メールを送信することができました。

【参考】
https://stackoverflow.com/questions/34058491/error-transport-config-smtp-is-missing-in-cakephp-3-x

投稿2019/03/09 10:02

en2019joy

総合スコア13

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

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

0

loripopでcakephp3にてメール送信している人がいました。
CakePHP3でメールを送信する

cakePHP3公式によるmail関数の中にtransportの設定方法があります。
Email

この2つを参考にすると、メソッドの使い方、引数の意味などがわかると思います。なお、この人はコンストラクタを使おうとしたのか、オブジェクト作成時に空の引数を代入していますが、ひょっとしたら必要ないかも知れません。

投稿2019/03/08 12:55

FKM

総合スコア3640

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

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

en2019joy

2019/03/08 13:18

教えていただいたサイトは 私が提示したURLのサイトと同じでした。 cakePHP3公式サイトを見る限り // サンプル SMTP 設定 Email::configTransport('gmail', [ 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'username' => 'my@gmail.com', 'password' => 'secret', 'className' => 'Smtp' ]); が今回やるべき設定だと思うのですが app.phpでそれを設定しているような気がするのですが 理解が違いますでしょうか?
en2019joy

2019/03/08 13:24

試しにControllerで // サンプル SMTP 設定 Email::configTransport('gmail', [ 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'username' => 'my@gmail.com', 'password' => 'secret', 'className' => 'Smtp' ]); の記載をして試してみましたが 結果は同じくタイムアウトでした。
FKM

2019/03/08 13:33

その人の記事に classNameをSmtpに設定すると、タイムアウトして送信できないので、Mailにすると、送信できました。 とありますよ。 また、その人はmailオブジェクトを作った後、transport()メソッドを使って、その引数にロリポップの設定ファイルを代入しています。使っているバージョンにもよりますが、そこを $sendEmail = new Mail(); $sendEmail -> setTransport('default'); としてもダメでしょうか?
en2019joy

2019/03/08 14:03

$sendEmail = new Mail(); $sendEmail -> setTransport('default'); とすると Transport config "default" is invalid, the required `className` option is missing というエラーになります。 $sendEmail = new Mail('default'); $sendEmail -> setTransport('lolipop'); $sendEmail = new Mail(''); $sendEmail -> setTransport('lolipop'); などもダメでした。
en2019joy

2019/03/08 14:08

classNameをSmtpに設定すると、タイムアウトして送信できないので、Mailにすると、送信できました。 の理解ですが、 *** ・className Mail、Smtp、Debugのいずれかを指定します。 Mailを指定した場合は、PHPのmail関数を使用してメールを送信します。 Smtpを使用した場合は、これ以降で設定する外部のSMTPサーバを使用してメールを送信します。 これ以降の項目は、classNameにSmtpを指定した場合のみ使用されます。 *** (引用元)https://www.sejuku.net/blog/30412#i-2 ということなので メールの設定が出来たという方の記事は PHPのmail関数を使用して送信できたというだけで SMTPサーバを使用して送信できたわけではないのでは? と思いました。
退会済みユーザー

退会済みユーザー

2019/03/08 14:49

smtpauthの設定が必要なのでは? (デフォルトはちがうはず)
en2019joy

2019/03/08 15:00

FKM様 何度もありがとうございます。 'className' => 'Mail' のお話しではなく 'mail' => のお話しですよね? 'mail' =>の設定を試してみましたが タイムアウトになりました。
en2019joy

2019/03/08 15:26 編集

asahina1979様 「smtpauthの設定」とは 'className' => 'Mail'を使う前提のphp.iniとsendmail.iniの設定でしょうか? それとも、 'className' => 'Smtp'を使う際のapp.phpで指定するEmailTransportのことでしょうか?
en2019joy

2019/03/09 09:57

FKM様 色々とお教えいただきありがとうございます。 お教えいただいたサイトに私が設定していない項目があったため それを設定したところ メールを送信することが出来ました。 ただ、 'transport' => 'default' の設定ではなかったため、解決方法に別途記載させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問