SORU
9 Temmuz 2014, ÇARŞAMBA


PHP mail formu't tamamlamak değil e-posta

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = 'contact@yoursite.com'; 
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        }
    }
?>

Basit bir mail form oluşturmaya çalıştım. İndex.html sayfamda kendisi, ama yukarıdaki kod php nerede gönderiniz için teşekkür ederim sayfa ayrı bir thankyou.php teslim formu yerleştirilmiştir. Kodu tam olarak gönderir, ama asla yardım lütfen.. bir e-posta gönderir...

CEVAP
9 Temmuz 2014, ÇARŞAMBA


Komut e-postalar göndermek gibi görünüyor çeşitli nedenler vardır. Açık sözdizimi bir hata olmadığı sürece zor bunları teşhis etmek için. Aşağıdaki kontrol listesi üzerinden herhangi bir potansiyel tuzaklar bulmak için çalıştırmak için gereken olmadan oluşuyor.

  • Hata raporlama etkin ve tüm hataları bildirmek için ayarlanmış olduğundan emin olun

Hata raporlama karşılaşır PHP kod hataları ve genel hatalar kökünü kazımak için gereklidir. Hata raporlama bu hataları almak için etkin olması gerekiyor. PHP dosyalarını üstünde aşağıdaki kodu (veya ana yapılandırma dosyasında) koyarak hata raporlama sağlayacaktır.

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

Bu konuda daha fazla ayrıntı için this Stack Overflow answer bkz.

  • Aslında mail() işlev çağrısı emin olun

Size aptalca gelebilir ama ortak bir hata aslında kodunuzda mail() işlevi yerine unutmayın. orada olduğundan emin olun diye değil.

  • Sunucunuzun posta kayıtlarını kontrol edin

Web sunucusu üzerinden e-postalar göndermek için tüm girişimler günlüğü olmalı. Bu konumu (bulunduğu sunucu yöneticinize sormak gerekebilir) ama sık logs altında bir kullanıcı kök dizininde bulunabilir değişir günlükleri. İçinde sunucu varsa, rapor, e-postalar göndermek için girişimleri ile ilgili hata mesajları olacak.

  • Hata bastırma operatörü kullanmayın

error suppression operator @ PHP bir ifade e, o ifade tarafından oluşturulan olabilir herhangi bir hata iletileri yok sayılır. Bu operatör kullanılarak gerekli olduğu durumlar vardır ama posta göndermedeğilbunlardan biri.

Kodunuz @mail(...) varsa, o zaman bu hata ayıklama yardımcı olacak önemli hata mesajları saklıyor olabilir. @ Kaldır ve eğer herhangi bir hata rapor olup olmadığını görmek.

40 ** hemen ardından sadece tavsiye somut başarısızlıkları için.

  • İletileri kontrol et görmek() işlevi doğru veya yanlış

mail() fonksiyon:

Dönerse posta başarıyla teslim için kabul edilmiştir, FALSE TRUE aksi. Önemli posta teslimi için kabul edildi diye mail aslında istenilen hedefe ulaşacak anlamına gelmez dikkat etmek önemlidir.

Bu önemli, çünkü notu:

  1. Eğer FALSE dönüş değeri alırsanız hata sunucu ile posta kabul yatıyor biliyorsun. Bu muhtemelen bir kodlama sorunu ancak sunucu yapılandırma sorunu değil. Sistem yöneticinize bunun neden olduğunu öğrenmek için konuşmanız gerekir.
  2. Eğer TRUE dönüş değeri alırsanız kesinlikle e-posta gönderilecektir. Sadece e-posta PHP ile sunucuda kendi işleyicisi başarıyla gönderilmiş demektir. Yine de e-posta gönderilecek neden olabilecek PHP kontrolü dışında başarısızlık daha fazla puan vardır.

FALSE TRUE yok ise doğru yönde bir işaret yardımcı olacaktırdeğilmutlaka e-posta başarıyla gönderildi. Bu ÖNEMLİ NOT için!

  • Spam klasörleri spam olarak işaretlenmiş e-posta Engellemek / kontrol edin

Çoğu zaman, çeşitli nedenlerle, e-postaları PHP (sunucu tarafı diğer programlama dilleri) ile gönderilen bir alıcının spam klasörüne sonunda. Zaman kodu sorun giderme önce kontrol edin.

Önlemek için posta yoluyla gönderilen PHP den gönderilen bir alıcının spam klasörüne, orada çeşitli şeyler yapabilirsin, hem de PHP kodu ve aksi halde, en aza indirmek için şansını e-postalar spam olarak işaretlenmiş. Michiel de Mare iyi ipuçları şunlardır:

  • Kimlik doğrulama yöntemleri ** 43 DKIM gibi e-posta etki alanı adınız birbirimize ait olduğumuzu kanıtlamak için, ve etki alanı adı sahteciliği önlemek için e-posta. SPF web siteniz için DNS oluşturmak için bir sihirbaz bilgiler içerir.
  • Check 46* *posta sunucusunun IP adresini posta göndermek için kullandığınız etki alanı adı için puan emin olun.
  • Kullandığınız IP adresi not on a blacklist olduğundan emin olun
  • Yanıtlama adresi geçerli, varolan bir adres olduğundan emin olun.
  • Alan, sadece e-posta adresi (*23 örneğin* ) İçin alıcı dolu, gerçek adını kullanma.
  • İstismar hesapları, abuse@yourdomain.com ve postmaster@yourdomain.com gibi izlemek. Bu hesaplar var, kendilerine gönderilen yazıyı oku ve şikayetler üzerine hareket emin olun.
  • Son olarak, bunu yapmakgerçektenkolay çıkmak için. Aksi takdirde, kullanıcılar basarak iptal olurspamdüğme ve itibarınızı etkileyecektir.

Bu konu hakkında daha fazla How do you make sure email you send programmatically is not automatically marked as spam? bkz.

  • Posta başlıklarını tedarik emin olun

Yazılım eğer ortak başlıklar eksik olmayan postaları reddeder biraz spam gibi "" ve "Yanıtla":

$headers = array("From: from@example.com",
    "Reply-To: replyto@example.com",
    "X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("\r\n", $headers);
mail($to, $subject, $message, $headers);
  • Posta başlıklarını bir yazım hatası yok emin olun

Geçersiz üstbilgi üst olması kadar kötü. Bir yanlış karakter e-posta rayından çıkarmak için gereken tüm olabilir. Başvurunuzu sözdizimi doğru olduğundan emin olmak için PHP olacak gibideğilsizin için bu hataları yakalamak.

$headers = array("From from@example.com", // missing colon
    "Reply To: replyto@example.com",      // missing hyphen
    "X-Mailer: "PHP"/" . PHP_VERSION      // bad quotes
);
  • Alıcı değerinin doğru olduğundan emin olun

Bazen sorun e-posta alıcısı için yanlış bir değer olması kadar basittir. Bu yanlış bir değişkeni kullanarak bağlı olabilir.

$to = 'user@example.com';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to

Bunu test etmek için başka bir yol sabit mail() işlev çağrısı: alıcı değer kodu

mail('user@example.com', $subject, $message, $headers); 

Bu mail() tüm parametreler için geçerli olabilir.

  • Birden fazla hesaba gönder

E-posta hesabı sorunları ekarte yardımcı olmak için, birden fazla e-posta hesapları için e-posta gönderfarklı e-posta sağlayıcıları. Eğer e-postalarınızı değil gelen bir kullanıcının Gmail hesabı aynı e-posta göndermek için bir Yahoo hesabı, Hotmail hesabı ve düzenli bir POP3 hesabı (ISS tarafından sağlanan e-posta hesabı).

Eğer e-postalar diğer e-posta hesapları veya bazı varmak, kodunuzu e-posta gönderiyor ama e-posta hesabı sağlayıcı bir nedenle engellenmesi olasıdır. Eğer bu e-posta herhangi bir e-posta hesabı geldiğinde değilse, sorun kodu ile ilgili olması daha muhtemeldir.

  • Web barındırma e-posta göndermeyi desteklediğinden emin olun

Bazı Web barındırma sağlayıcıları izin veya kendi sunucuları üzerinden e-posta göndermeyi etkinleştir. Bunun nedenleri değişebilir ama eğer mail gönderme devre dışı varsa üçüncü bir parti için bu e-postalar göndermek için kullandığı alternatif bir yöntem kullanmanız gerekir.

Teknik destek için bir e-posta (çevrimiçi destek veya onların SSS bir yolculuktan sonra) eğer e-posta yetenekleri sunucunuz üzerinde mevcut olup olmadığını açıklığa kavuşturmalıdır.

  • localhost, eğer bir posta sunucusu olduğundan emin olun

Eğer yerel iş istasyonu WAMP, MAMP, ya da KENDİ kullanarak geliştiriyorsanız, e-posta sunucusu muhtemelen senin iş istasyonu üzerinde yüklü değil. Biri olmadan, PHP edemiyor varsayılan olarak posta gönderin.

Temel bir posta sunucusu yükleyerek bunun üstesinden gelebilirsiniz. Windows için ücretsiz Mercury Mail kullanabilirsiniz.

Ayrıca SMTP e-posta göndermek için kullanabilirsiniz. Vikas Dwivedi 50 *bunun nasıl yapılacağını öğrenmek için bkz.

  • PHPs mail.log özel etkinleştirin

Eğer Posta ve PHPs günlük dosyası ek olarak, logging for the mail() function özellikle etkinleştirebilirsiniz. Tam SMTP etkileşim kaydı yok, ama en azından fonksiyon parametreleri ve çağırma komut dosyası arayın.

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

Ayrıntılar için http://php.net/manual/en/mail.configuration.php bkz. (En iyi php.ini .user.ini .htaccess bu seçenekler belki etkinleştirmek için.)

  • Alternatif mailler kullanmayı düşünün

PHP mail() fonksiyonuna kullanışlı ve sık sık iş bitmiş olur. Ama sorunlar yukarıda özetlenen bir çok işleme de dahil olmak üzere daha fazla güç ve esneklik sunan alternatifler var. Bu bir kullandığı popüler PHPMailer SwiftMailer, hatta eski PEAR::Mail düşünebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andytokkallos

    Andytokkallo

    27 Kasım 2007
  • DavideoDesign

    DavideoDesig

    24 NİSAN 2006
  • NextGenWindows

    NextGenWindo

    8 Kasım 2011