PHP posta işlevi, ne yanlış burada?

4 Cevap php

Aşağıdaki kod bana aşağıdaki değişkenleri taşıyan bir e-posta gönderir. Ifadeleri ise son biri (posta) sonra echo "Siz yakında temas olacak" diyor. Betik "Çok yakında sizinle temasa geçecektir" geri yankılandı olsun çalışır, ancak, ben bir e-posta almak asla.

Ben çalışır küçük bir temas script (bu ilk ve büyük bir sonra yayınlanmıştır) var.

Note: contants.php and functions.php are both included and work fine WEBMASTER_EMAIL is defined in contanstants.php and is correct, because my smaller contact script uses the same variable, and emails me fine.

Yardımlarınız için teşekkürler

 <?php

// pull constant variables
include("php/constants.php");

error_reporting (E_ALL ^ E_NOTICE);

$post = (!empty($_POST)) ? true : false;

if($post) {
    include ("php/functions.php");
}

// general info
$name = stripslashes($_POST['contact']);
$phone = $_POST['phone'];
$email = trim($_POST['email']);
$time_to_reach = $_POST['time-to-reach']; // what the best time to reach them?

// delivery info
$delivery_address = $_POST['del-address'];
$delivery_city = $_POST['del-city'];
$delivery_state = $_POST['del-state'];
$delivery_zip = $_POST['del-zip'];

// moving city info if applicable
$moving_address = $_POST['move-address'];
$moving_city = $_POST['move-city'];
$moving_state = $_POST['move-state'];
$moving_zip = $_POST['move-zip'];

// date needed
$month = $_POST['month'];
$day = $_POST['day'];
$year = $_POST['year'];

// how long do you need the storage?
$storage_length = $_POST['time-length'];

// how many containers do you need?
$quantity_containers =  $_POST['number-of-containers'];

// how did you hear about us?
$tracker =  $_POST['tracker'];

// message
$message_holder = htmlspecialchars($_POST['message']);

$error = '';

// check general info
if(!$name) { $error .= 'Please enter your name.<br />'; }
if(!$email) { $error .= 'Please enter an e-mail address.<br />'; }
if($email && !ValidateEmail($email)) { $error .= 'Please enter a valid e-mail address.<br />'; }
if(!$time_to_reach) { $error .= 'Please select the best time to reach you.<br />'; }

// check delivery info
if(!$delivery_address) { $error .= 'Please enter you current address.<br />'; }
if(!$delivery_city) { $error .= 'Please enter your current city.<br />'; }
if(!$delivery_state) { $error .= 'Please enter your current state.<br />'; }
if(!$delivery_zip) { $error .= 'Please enter your current zip code.<br />'; }

// check date needed
if(!$month) { $error .= 'Please enter the approximate date you need the storage.<br />'; }
if(!$day) { $error .= 'Please enter the approximate date you need the storage.<br />'; }
if(!$year) { $error .= 'Please enter the approximate date you need the storage.<br />'; }

// check length of time needed
if(!$storage_length) { $error .= 'Approximatly how long will you need the storage unit for?<br />'; }

// check quantity of storages
if(!$quantity_containers) { $error .= 'How many containers will you need?<br />'; }

// check advertising tracker
if(!$tracker) { $error .= 'Please let us know how you\'ve heard of us.<br />'; }

// check message (length)
if(!$message_holder || strlen($message_holder) < 10) {
    $error .= "Please enter your message. It should have at least 10 characters.<br />";
}

// build email message
$message = "Name: {$name}
Phone: {$phone}
Email: {$email}
Best time to reach: {$time_to_reach}\n
-----------------------------------------------------
Delivery address: {$delivery_address}
              {$delivery_city}, {$delivery_state} {$delivery_zip}

Moving address: {$moving_address}
              {$moving_city}, {$moving_state} {$moving_zip}
-----------------------------------------------------
Date needed: {$month}/{$day}/{$year}
Length of time needed: {$storage_length}
Number of containers: {$quantity_containers}
Where did you hear about us? 
{$tracker}\n
Message: {$message_holder}\n";

if(!$error) {
    $mail = mail(WEBMASTER_EMAIL, $subject, $message,
         "From: residential-quote@stocor.com\r\n"
        ."Reply-To: ".$name."<".$email.">\r\n"
        ."X-Mailer: PHP/" . phpversion());

    if($mail) {
        echo '<p>Thank you, you will be contacted soon.</p>';
    }   
} else {
    echo '<div class="notification_error">'.$error.'</div>';
}

?>

Aşağıdaki komut, iletişim script, ben bir e-posta alacaksınız anlamına çalışır.

<?php

// pull constant variables
include("php/constants.php");

error_reporting (E_ALL ^ E_NOTICE);

$post = (!empty($_POST)) ? true : false;

if($post) {
    include ("php/functions.php");
}

// variables
$name = stripslashes($_POST['name']);
$phone = $_POST['phone'];
$email = trim($_POST['email']);
$tracker = $_POST['tracker'];
$message_holder = htmlspecialchars($_POST['message']);

$error = '';

// check name
if(!$name) {
    $error .= 'Please enter your name.<br />';
}

// check email
if(!$email) {
    $error .= 'Please enter an e-mail address.<br />';
}

// validate email
if($email && !ValidateEmail($email)) {
    $error .= 'Please enter a valid e-mail address.<br />';
}

// check advertising tracker
if(!$tracker) {
    $error .= 'Please let us know how you\'ve heard of us.';
}

// check message (length)
if(!$message_holder || strlen($message_holder) < 10) {
    $error .= "Please enter your message. It should have at least 10 characters.<br />";
}

// build email message
$message = "Name: {$name} \n
Phone: {$phone} \n
Email: {$email} \n
Where did you hear about us? 
{$tracker}\n\n
Message: {$message_holder}\n";

if(!$error) {
    $mail = mail(WEBMASTER_EMAIL, $subject, $message,
         "From: contact@stocor.com\r\n"
        ."Reply-To: ".$name."<".$email.">\r\n"
        ."X-Mailer: PHP/" . phpversion());

    if($mail) {
        //header("Location: thank_you.php");
        echo "Thank you. You will be contacted soon.";
    }   
} else {
    echo '<div class="notification_error">'.$error.'</div>';
}

?>

4 Cevap

Çıplak mail fonksiyonu kullanarak sadece (http://en.wikipedia.org/wiki/E-mail_injection, php özel bilgi: http://www.damonkohler.com/2008/12/email-injection.html) belaya ve basit hata ayıklama önler. Bu o php mail formu başlığı enjeksiyon spam için bir standart dışı hedef yaparak, size başlıklarını filtre faydaları vardır, ve sadece daha kolay mesajları ayıklamak için izin tarafından çünkü hem posta işlevi etrafında bir nesne sarıcı kullanmanızı öneririz oluşturulan posta nesnesi damping ve gözden bu içeriği bulunuyor. Hata ayıklama için o da size / don 't bir mail sunucuya sahip olmak istiyorsanız, ve hatta denemek istemiyorum yok makinelerde yerel test için bir "sadece sonunda postayı echo" alternatifi sunmak için izin verir Sadece işlevsellik testi yaparken posta göndermek için.

Here is a wrapper (freely available for modification and use) that I created and use myself: http://github.com/tchalvak/ninjawars/blob/master/deploy/lib/obj/Nmail.class.php

Alternatif olarak sadece kontrol ARMUT posta: http://pear.php.net/package/Mail/

Bu, neden tüm yol kadar hataları dönüm deneyin ve eğer inşaat görmüyorum, bana dışarı atlama değil.

error_reporting(1);

Yazısının üstünde.

EDIT: Özür dilerim, hata raporlama açık var şimdi bakın. Emin olun INI dosyası çok düzgün ayarlanmış. Eğer bu uyarıları görmek, böylece de, ^ E_NOTICE kaldırmayı deneyin.

mail() hiç bir şey demezdim nerede sorunlar yaşadım (ve başarılı sanki idam olurdu) gerçekten değil ne zaman. Eğer mail(), bir şey ters gider ve bir taşıma sınıf Swift_MailTransport, hangi kullanır mail() içerdiğinde genellikle yararlı istisnalarını atar SwiftMailer kullanabilirsiniz kullanma peşinde iseniz ama güzel bir nesne yönelimli arayüzü giydirilir.

Yani nedeniyle sorun (posta teslimi için kabul ediliyor - $ mail doğrudur) doğası gereği, problem ileti içeriği muhtemeldir. Eğer posta sunucusu kendisi erişimi var mı? Eğer günlüklerini kontrol edebilirsiniz? var_dump () $ konu, $ mesaj, ve bir var ve var_dump için başlıkları ayarlayabilirsiniz () bu kadar iyi. Ince dişli tarak ile içeriğini inceleyin. O iş yapana kadar şüpheli karakterleri ve satır sonlarını kaldır.

Denemek için bir şey ... (gerçi, diğer posta kabul ediliyor olması, bu böyle değil olası olduğunu söylüyor)

http://www.php.net/manual/en/function.mail.php

If messages are not received, try using a LF (\n) only. Some poor quality Unix mail transfer agents replace LF by CRLF automatically (which leads to doubling CR if CRLF is used). This should be a last resort, as it does not comply with » RFC 2822.

Posta ile () sorun olduğunu onun sadece yerel sendmail deamon'ınıza mail besleme. Size postada herhangi bir aktif geribildirim vermez ve röle başlıkları bazen istenmeyen de iyi olsun.

Ben kontrol ederim http://sourceforge.net/projects/phpmailer/