🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

PHP

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

Q&A

解決済

2回答

7523閲覧

PHPMailerで、SMTPサーバーを経由した場合のメール送信が遅い

退会済みユーザー

退会済みユーザー

総合スコア0

SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

PHP

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

0グッド

0クリップ

投稿2017/06/02 11:16

簡易的なSNSシステムの開発にあたり、メッセージを受した時・フォローされた時などに、ユーザーへ通知メールを送信する処理を組み込むこととなりました。

迷惑メールとして扱われる可能性を減らすため、SMTPサーバー経由でメール送信できる「PHPMailer」というライブラリを導入しました。

メールアカウントはGmailのものを使用し、送信は問題無く行えていますが、送信処理自体に時間がかかっている点で困っています。

以下、実際のコードとなります。

php

1 2//ライブラリ読み込み 3require_once('PHPMailerAutoload.php'); 4 5//メール設定 6$mail = new PHPMailer(); 7$mail->isSMTP(); 8$mail->Host = 'smtp.gmail.com'; 9$mail->SMTPAuth = true; 10$mail->Username = 'xxxxxxxx@gmail.com'; 11$mail->Password = 'xxxxxxxx'; 12$mail->SMTPSecure = 'tls'; 13$mail->Port = '587'; 14$mail->CharSet = "UTF-8"; 15$mail->setFrom('xxxxxxxx@gmail.com','差出人'); 16$mail->Subject = 'テストメール件名'; 17$mail->Body = 'テストメール本文'; 18$mail->addAddress('xxxxxxxx@gmail.com'); 19 20//送信直前の時間を計測 21$arrTime = explode('.',microtime(true)); 22echo date('Y-m-d H:i:s', $arrTime[0]) . '.' .$arrTime[1]; 23 24//メール送信 25$mail->Send(); 26 27//送信直後の時間を計測 28$arrTime = explode('.',microtime(true)); 29echo '<br>'.date('Y-m-d H:i:s', $arrTime[0]) . '.' .$arrTime[1]; 30

実行結果

php

12017-06-02 19:55:29.68 22017-06-02 19:55:32.16

送信処理を行う「$mail->Send();」の前後でミリ秒までを出力してみた所、実行結果を見て頂くと分かる通り、平均で2~3秒もかかってしまいました。

SMTP認証を行わないと0.05秒程度で処理が完了するので、外部SMTPサーバー経由で送信している事が原因かと考えています。

SNSシステムと同じサーバーに、自前でSMTPサーバーを構築すれば良いのかと考えたのですが、構築の経験が無く、どのサイトを参考にすれば良いか判断が付きません。

SMTP認証は必須ではありませんので、迷惑メールとして扱われる可能性が低く、また短時間(可能であれば1秒以下)で送信を行える方法はありませんでしょうか?

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

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

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

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

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

guest

回答2

0

SMTP認証を行わない方法はmail()とかmb_send_mail()とか?
これらは内部的にはサーバーでコマンドを実行しているだけで
受け入れられたかどうかを判断した時点で結果が帰ってきているので早く終わったように思える
…と思っていましたが違うでしょうか(詳しい方の補足を望みます)
完了したと判断した時点でも実はまだサーバーにキューが溜まっていて配送中だったり。

投稿2017/06/02 13:11

yuki84web

総合スコア1857

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

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

0

ベストアンサー

メールの送受信数に関する制限 - Gmail ヘルプ

Gmail経由でメール送信するのはおすすめできません。
1日に500通を越えるメール送信を行うと送信制限され、
解除されるのに1~24時間かかるそうです。
とてもサービスの通知メール送信用には使えません。

レンタルサーバーなら業者提供のマニュアル・説明書などに
参考事例が書いて有りそうなものですが、チェックしていますか?

投稿2017/06/02 11:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問