2014-01-02 5 views
0

Я пытаюсь отправить несколько писем с помощью php. Но каждый раз, когда я пытаюсь отправить электронное письмо, я получаю «errorerrorerror» -one «error» для каждого письма, которое находится в таблице. Вот кодОтправка нескольких электронных писем сразу с помощью PHP

$emailsql = "SELECT Username FROM Companyuserinfo WHERE Company_ID = '$cid'"; 
$emailquery = mysqli_query($connection, $emailsql); 


while($emailrow = mysqli_fetch_array ($emailquery)){ 
$Usernamesend = $emailrow['Username']; 

$sendsql = "SELECT * FROM users WHERE username = '$Usernamesend'"; 
$sendquery = mysqli_query($connection, $sendsql); 

$sendrow = mysqli_fetch_array ($sendquery); 
    $emailtosend = $sendrow['email']; 

    $to="$emailtosend"; 
    $from = "[email protected]"; 
    $subject="TEST!"; 
    $message="HEY MY BROTHER!! I AM TESTING TdfdHIS BABY! WOOHOO!"; 
    $headers = "From: $from\n"; 
     $headers .= "MIME-Version: 1.0\n"; 
     $headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
    mail($to, $subject, $message, $headers); 

    if (!mail($to, $subject, $message, $headers)){ 
    echo "error"; 
    } 
    else{ 
     echo "Form submitted successfully! Press back $emailtosend"; 
} 
} 
+0

Вы дважды вызывали 'mail()' дважды в цикле цикла '' while'. – Raptor

+1

'mail()' должно сообщать вам, что не так. Убедитесь, что включен отчет об ошибках. Кроме того, 'hesnet.org' должен быть запущен на сервере, с которого вы отправляете это. –

+0

Вы также можете сохранить результат 'mail()' в tmp var, например $ result = 'mail()', а затем проверить это вместо вызова 'mail()' дважды, как отметил Шиван. Кроме того, 'error_get_last()' может помочь вам найти ошибку (как Марио ответил на http://stackoverflow.com/questions/4913817/catching-php-mail-errors-and-showing-reasonable-user-error-message) – colares

ответ

2

Я получил его для работы .... заменил мой предыдущий скрипт этим;

$emailsql = "SELECT * FROM Companyuserinfo WHERE Company_ID = '$cid'"; 
$email_query = mysqli_query($connection, $emailsql); 
while($emailrow = mysqli_fetch_array ($email_query)){ 
$Usernamesend = $emailrow['Username']; 
$company_name = $emailrow['Company_Name']; 
$sendsql = "SELECT * FROM users WHERE username = '$Usernamesend'"; 
$send_query = mysqli_query($connection, $sendsql); 
$mail_body = ''; 
$sendrow = ''; 
$sendrow = mysqli_fetch_array($send_query); 
    $email = $sendrow["email"]; 
    $name = $sendrow["first_name"]; 

    $to = "$email";       
     $from = "[email protected]"; 
     $subject = "TESTINGG"; 
     $message = 'TEST!!'; 
     $headers = "From: $from\n"; 
     $headers .= "MIME-Version: 1.0\n"; 
     $headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
     $headers .= "X-Priority: 1 (Highest)\n"; 
     $headers .= "X-MSMail-Priority: High\n"; 
     $headers .= "Importance: High\n"; 
     $mail_result = mail($to, $subject, $message, $headers); 
}  
     if ($mail_result) { 
     echo "Submitted Successfully! Press close"; 
    } else { 
     echo "There was an error submitting... Press close"; 
    } 
0
mail($to, $subject, $message, $headers); 
if (!mail($to, $subject, $message, $headers)){ 
    echo "error"; 
} 

Внутри, если заявление, он работает mail() функцию. Удалите прежнюю функцию и просто держите ее внутри оператора if.

Try:

//mail($to, $subject, $message, $headers); 
if (!mail($to, $subject, $message, $headers)){ 
    echo "error"; 
} 
+1

Логическая ошибка больше, чем это. – Raptor

+0

Я не уверен, что вы подразумеваете под этим. – Goodies

+1

Проблема глубже, чем дублированный вызов 'mail()', поскольку они, похоже, не работают вообще –

0

Ваш код имеет логические ошибки, а вот предложил исправить.

$error_cnt = 0; 
$emailsql = "SELECT Username FROM Companyuserinfo WHERE Company_ID = '$cid'"; 
$emailquery = mysqli_query($connection, $emailsql); 
$from = "[email protected]"; 
$subject="TEST!"; 
$message="HEY MY BROTHER!! I AM TESTING TdfdHIS BABY! WOOHOO!"; 
$headers = "From: $from\n"; 
$headers .= "MIME-Version: 1.0\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\n"; 
while($emailrow = mysqli_fetch_array ($emailquery)){ 
    $Usernamesend = $emailrow['Username']; 
    $sendsql = "SELECT * FROM users WHERE username = '$Usernamesend'"; 
    $sendquery = mysqli_query($connection, $sendsql); 
    $sendrow = mysqli_fetch_array ($sendquery); 
    if (!mail($sendrow['email'], $subject, $message, $headers)){ 
    $error_cnt++; 
    break; // (optional) stop the loop when error is encountered. 
    } 
} 
if($error_cnt === 0) { 
    echo "Form submitted successfully! Press back $emailtosend"; 
} else { 
    echo $error_cnt . ' error(s) occurred.'; 
} 

Side Примечание: Если сервер SMTP требует аутентификации, mail() не поддерживает его. Попытайтесь использовать PHPMailer или SwiftMailer для аутентификации и/или поддержки вложений.

Кроме того, заметил, что $emailsql использует одинарную котировку для поля Company_ID. Если это целое число, одинарные кавычки не требуются.

Далее рассмотрим объединение двух операторов SQL в один, соединяя таблицу (если возможно).

Последнее, немного увеличит производительность, указав переменную, указанную вне цикла while, чтобы избежать повторного создания переменной одного и того же содержимого.

+0

спасибо за ответ, я пробовал это хотя, но безрезультатно:/ – user3063919

+0

okay ... сделал немного выкапывая, а затем снова попробовал ваш метод ...теперь im get (1) произошла ошибка @ShivanRaptor – user3063919

+0

Тогда 1 сообщение не может быть отправлено. Другие отправляются успешно. Возможно, адрес электронной почты неверен. – Raptor

Смежные вопросы