Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Opóźnienie wysyłki e-maila phpmailer
Forum PHP.pl > Forum > PHP
Poczatkujacy_Web
Witam,

mam skrypt, który wysyla 2 maile, jeden do mnie z wypełnionym formularzem, drugi do klienta z podziekowaniem i załącznikiem.

Co chcę zrobić:
- opóźnić wysyłke maial do klienta np o 30min

Poniżej mój kod, będę wdzięczny za każdą pomoc

  1. <?php
  2.  
  3. require_once 'class.phpmailer.php';
  4.  
  5. $_POST = array_map('trim', $_POST);
  6.  
  7. $error = false;
  8.  
  9. if (!isset($_POST['contact_name']) || empty($_POST['contact_name'])) {
  10. $error = true;
  11. }
  12.  
  13. if (!isset($_POST['contact_email']) || empty($_POST['contact_email']) || !PHPMailer::ValidateAddress($_POST['contact_email'])) {
  14. $error = true;
  15. }
  16.  
  17. if (!isset($_POST['contact_body']) || empty($_POST['contact_body'])) {
  18. $error = true;
  19. }
  20.  
  21. if (!isset($_POST['contact_check']) || empty($_POST['contact_check']) || (int) $_POST['contact_check'] !== ((int) $_POST['contact_check_data'][0] * (int) $_POST['contact_check_data'][1])) {
  22. $error = true;
  23. }
  24.  
  25. if ($error) {
  26. exit('nok');
  27. }
  28.  
  29. $mail = new PHPMailer();
  30.  
  31. $mail->CharSet = 'UTF-8';
  32. $mail->SetFrom($_POST['contact_email'], $_POST['contact_name']);
  33. $mail->AddAddress('infozformularza@gmail.com');
  34. $mail->Subject = 'Wiadomość ze strony internetowej';
  35. $mail->Body = $_POST['contact_body'];
  36.  
  37.  
  38.  
  39. if(!$mail->send()) {
  40. echo 'Message was not sent.';
  41. echo 'Mailer error: ' . $mail->ErrorInfo;
  42. } else {
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49. $mail = new PHPMailer();
  50.  
  51.  
  52. $mail->CharSet = 'UTF-8';
  53. $mail->SetFrom('mojmail@gmail.com', 'Ja');
  54. $mail->AddAddress($_POST['contact_email'], $_POST['contact_name']);
  55. $mail->Subject = "Thank you for contacting us!";
  56. $mail->Body = "Hello!
  57.  
  58. Thank you for contacting us! We will get back to you
  59. as soon as possible!
  60.  
  61. Yours sincerely,
  62.  
  63. Your name
  64. www.yourwebsite.com
  65. ";
  66.  
  67.  
  68. $mail->AddAttachment("../plik.pdf");
  69.  
  70.  
  71.  
  72. if(!$mail->send()) {
  73. echo 'Message was not sent.';
  74. echo 'Mailer error: ' . $mail->ErrorInfo;
  75. } else {
  76.  
  77. exit('ok');
  78. }
  79. }
  80.  
  81. ?>
Pyton_000
Jedynie co możesz zrobić to wrzucać mejle do kolejki (np. baza, Redis, rabbitMQ itd) i dopiero taki mechanizm pozwoli Ci na wysyłanie mejli z opóźnieniem.
trueblue
Po co tworzysz drugi obiekt PHPMailer?
Wystarczy jeden. Nie musisz wtedy ustawiać również charset. Pamiętaj jednak aby wyczyścić poprzez clearAddresses.
lukaskolista
2 różne emaile - 2 różne obiekty tak na logikę - jest dobrze. Ogólnie stosowanie immutable objects to bardzo dobra praktyka, zwiększa czytelność kodu i ułatwia debugowania oraz pozwala pisać kod po prostu lepiej jeśli chodzi o wszelkiego rodzaju wzorce itp.

Propozycja trueblue w oczywisty sposób temu przeczy, dodatkowo sam phpmailer nie ułatwia sprawy.

Nie bardzo wiem, po co chcesz opóźniać wysyłkę drugiego maila?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.