Bir uygulamanın gönderdiği posta genelde sessizce başarısız olur. İşlev true döndürür, ileti yerel bir sürece teslim edilir ve bir saat sonra reddedildiğini size hiçbir şey söylemez. Çaresi, kimliği doğrulanmış SMTP üzerinden göndermektir; orada bir başarısızlık, görebileceğiniz bir hatadır.
mail() kullanmayın
- İletinin teslim edilip edilmediğini değil, devredilip devredilmediğini bildirir.
- Web sunucusu kullanıcısı adına gönderir, bu yüzden SPF ve DKIM genelde başarısız olur.
- Kimlik doğrulaması, yeniden deneme ve okuyabileceğiniz bir kaydı yoktur.
SMTP kullanın
use PHPMailer\PHPMailer\PHPMailer;
$m = new PHPMailer(true);
$m->isSMTP();
$m->Host = 'mail.yourdomain.com';
$m->SMTPAuth = true;
$m->Username = 'noreply@yourdomain.com';
$m->Password = getenv('SMTP_PASS');
$m->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$m->Port = 465;
$m->setFrom('noreply@yourdomain.com', 'Your Shop');
$m->addReplyTo('support@yourdomain.com');
$m->addAddress($customerEmail);
$m->Subject = 'Your order';
$m->Body = $text;
$m->send();
Parolayı asla kodun içine koymayın. Onu ortamdan okuyun ve ortam dosyasını belge kökünün ve git'in dışında tutun.
From alanı sizin kendi alan adınız olmalı
Yanıtlar çalışsın diye From alanına müşterinin adresini yazmak klasik hatadır: o zaman gmail.com adına göndermiş olursunuz ve bu, onların SPF ve DMARC denetiminden düpedüz geçemez. Kendi alan adınızla gönderin ve Reply-To'yu onunkine ayarlayın.
Onu arka planda gönderin
İstek sırasında göndermek, ziyaretçiyi uzaktaki bir sunucu için bekletir ve bir posta kesintisini bozuk bir ödemeye çevirir. Kuyruğa alın ve bir işçiden gönderin.
Ve sonucu kaydedin
$m->SMTPDebug = 2; // development only
// production: record the message ID and the accept/reject per recipient
İşlemsel olan her şey için - makbuzlar, parola sıfırlamaları - ayrılmış bir gönderim hizmeti kullanın. Ulaşabilirlik onların bütün işidir ve bu, makbuzlarınızı bültenlerinizden ayırır: bakınız işlemsel posta ile bültenler.
