PhpMailer ~发送延迟30秒

8ulbf1ek  于 2023-04-28  发布在  PHP
关注(0)|答案(2)|浏览(110)

好吧,我有一些问题与PhpMailer。
1.在执行$mail-〉send之前有大约30秒的延迟。
2019-07-2313:43:55联系:打开smtpgmail.com:587,timeout=300,options=array()
2019-07-2313:44:16联系方式:打开的
2019-07-23 13:44:16服务器等..(一些参数列表)。
1.用于注册用户的代码。我在模型方法中示例化了Mail类,然后在控制器中调用该方法,然后调用成功登录后重定向的函数。我也得到了头已经发送错误。
2019-07-23 13:44:17联系方式:封闭的
消息已发送
警告:无法修改标头信息-标头已由(输出开始于C:\xampp\htdocs\log\vendor\phpmailer\phpmailer\src\SMTP.PHP:257)在C:\xampp\htdocs\log\App\Core\Controller.第43行
我的代码:
邮件类别:

  1. class Mail
  2. {
  3. public function sendMail($to, $subject, $text, $html)
  4. {
  5. $mail = new PHPMailer(true);
  6. try {
  7. //Server settings
  8. $mail->SMTPDebug = 3;
  9. $mail->isSMTP();
  10. $mail->Host = 'smtp.gmail.com';
  11. $mail->SMTPAuth = true;
  12. $mail->Username = 'wuwu5431@gmail.com';
  13. $mail->Password = 'Password';
  14. $mail->SMTPSecure = 'tls';
  15. $mail->Port = 587;
  16. //Recipients
  17. $mail->setFrom('wuwu5431@gmail.com', 'John Smith');
  18. $mail->addAddress($to, '');
  19. $mail->addReplyTo('wuwu5431@gmail.com', 'Information($mail->addReplyTo)');
  20. //Content
  21. $mail->isHTML(true);
  22. $mail->Subject = $subject;
  23. $mail->Body = $text;
  24. $mail->AltBody = $html . ' $html . This is the body in plain text for non-HTML mail clients';
  25. $mail->send();
  26. echo 'Message has been sent';
  27. } catch (Exception $e) {
  28. echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
  29. }
  30. }//end of method
  31. }// end of class

型号(方法):

  1. public function sendActivationEmail($email)
  2. {
  3. $url = 'url';
  4. $text = 'text';
  5. $html = 'html';
  6. $mail = new \App\Mail;
  7. $mail->sendMail($email, 'Account activation', $text, $html);
  8. }

控制器(方法):

  1. public function register()
  2. {
  3. if ($_SERVER['REQUEST_METHOD'] == 'POST'){
  4. $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
  5. foreach($_POST as $key => $value){
  6. $data[$key] = htmlspecialchars(strip_tags(trim($value)));
  7. }
  8. $this->userModel = new \App\Models\UserM;
  9. if ($this->userModel->Register($data)) {
  10. Flash::addMessage('Thank you for Registering with us');
  11. $this->userModel->sendActivationEmail($data['email']);
  12. $this->redirect('User/UserC/success');
  13. }
  14. }
  15. }

环境:win7,xampp,localhost.

jjjwad0x

jjjwad0x1#

这是完全正常的-欢迎来到SMTP的世界。
SMTP可以在事务中的多个点上施加长达10分钟的延迟,因此它不适合在页面提交处理期间使用,尽管这样做仍然很常见。
处理它的方法是使其异步(就您的页面而言),并且有多种方法可以做到这一点,例如将消息隐藏在一个队列中,稍后由一个单独的进程拾取和发送(例如,将消息存储在一个队列中)。例如,不妨碍您的页面提交处理),或者直接提交到本地邮件服务器,该服务器通常会在几毫秒内接受提交,并为您处理后续递送。
与此分开,这些行可能是错误的:

  1. $mail->setFrom('wuwu5431@gmail.com', 'John Smith');
  2. $mail->addAddress($to, '');
  3. $mail->addReplyTo('wuwu5431@gmail.com', 'Information($mail->addReplyTo)');

如果您的 fromreply-to 地址相同,则 reply-to 将被忽略。如果你没有一个名字去与 * 到 * 地址,只是离开它关闭。单引号字符串在PHP中不进行变量插值。你可能只想:

  1. $mail->setFrom('wuwu5431@gmail.com', 'John Smith');
  2. $mail->addAddress($to);
aor9mmx1

aor9mmx12#

尝试使用IP作为邮件服务器。有同样的问题,从域交换到IP将时间缩短到约1秒

相关问题