2014-02-08 9 views
0

У меня есть форма на моем сайте, где люди могут присоединиться к событиям. Коды позади него для работы таким образом:Отправлять почту через SMTP?

1. Вся информация сохраняется в базе данных. Эта часть отлично работает

2. Вторая часть кодов отправить по электронной почте мне и пользователю с информацией он intered (так же, как информация сохраняется в базе данных)

Вопрос заключается в том, что электронные письма отправляются неавторизованными по электронной почте по умолчанию на учетной записи хостинга. Мне нужно изменить сценарий, чтобы принудительно использовать аутентификацию SMTP с действительным адресом электронной почты в моей учетной записи хостинга, чтобы исправить ошибку. В настоящий момент скрипт отправляет электронное письмо, но заканчивается спамфильтром со всеми интернет-провайдерами, поэтому пользователь не получает электронное письмо.

Я не знаю, как это сделать, или создайте коды, чтобы сценарий использовал аутентификацию SMTP. Ниже приведены коды, которые у меня есть. Кто-нибудь может мне помочь?

<? 
// SEND OUT EMAIL PART 
// COPY SEND TO MY SELF 
$to = "[email protected]"; 
$from = $_REQUEST['email'] ; 
$name = $_REQUEST['name'] ; 
$headers = "From: $from"; 
$subject = "Thanks!"; 

$fields = array(); 
$fields{"name"} = "Name"; 
$fields{"address"} = "Address"; 
$fields{"phone"} = "Phone"; 
$fields{"email"} = "E-mail addesse"; 

$body = "INFO:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } 


// SEND TO THE USER 
$headers2 = "From: [email protected]"; 
$subject2 = "THANKS!"; 

$fields2 = array(); 
$from = $_REQUEST['email'] ; 
$name = $_REQUEST['name'] ; 
$headers = "From: $from"; 
$subject = "Thanks!"; 

$body2 = " 

TEXT TO EMAIL RECEIVER 

\n\n"; foreach ($fields2 as $a => $b){ $body2 .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } 

// ERROR MESSAGES 
if($from == '') {print "MISSING EMAIL ADDRESS.";} 
else { 
if($name == '') {print "MISSING NAME";} 
else { 
$send = mail($to, $subject, $body, $headers); 
$send2 = mail($from, $subject2, $body2, $headers2); 
if($send) 
{header("Location: http://mysite/send.php");} 
else 
{print "MISSING EMAIL ADDRESS ALL FILDS MUST BE FILLED!"; } 
} 
} 
?> 

ответ

0

Лучшее, если вы используете специальный сценарий для отправки электронных писем. Такие, как PHPMailer, который дает вам различные варианты конфигурации, включая SMTP:

// Send Mail 
$mail = new PHPMailer(); // initiate 
$mail->IsSMTP(); // use SMTP 

// SMTP Configuration 
$mail->SMTPAuth = true; // set SMTP 
$mail->Host = "myhost"; // SMTP server 
$mail->Username = "[email protected]"; 
$mail->Password = "password";    
$mail->Port = 465; // change port is required 
+0

@Micakkef ли я просто добавить вышеуказанные коды выше моих кодов, изменить данные, так что подходит моя, загрузить PHPMailer, а затем она работает или мне нужно сделать некоторые дополнительные, чтобы заставить его работать ? Я не уверен, как работает этот phpmailer. –

+0

Посмотрите на свой веб-сайт, чтобы увидеть рабочий пример. Вам нужно будет загрузить файлы и включить их в свой скрипт. http://phpmailer.worxware.com/index.php?pg=examplebsmtp – malta

0

Это один из способов сделать это. Вам нужно включить PHPMailer

#somewhere in code before you call function 
include($path_to_PHPMailer."class.smtp.php"); 

function sendEmail($email,$name,$title,$content,$who=false,$att=array('')){ 
    //VARIABLE $email is email of sender 
    //VARIABLE $name is name of sender 
    //VARIABLE $title is title of email 
    //VARIABLE $content is content of email 
    $mail = new PHPMailer(); 
    $mail->IsSMTP(); // telling the class to use SMTP 
    // DOUBLE $mail->Host  = "your email_server"; // SMTP server 
    $mail->SMTPDebug = 0;      // enables SMTP debug information (for testing) 
    // 1 = errors and messages 
    // 2 = messages only 
    $mail->SMTPAuth = true;     // enable SMTP authentication 
    $mail->Host  = "your email_server"; // sets the SMTP server 
    $mail->Port  = server port;     // set the SMTP port for the GMAIL server 
    $mail->Username = "your username"; // SMTP account username 
    $mail->Password = "your password";  // SMTP account password 

    if($who){ 
     $mail->SetFrom($email, $name); 
     $mail->AddReplyTo($email,$name); 
     $address = "set your email";//EMAIL OF RECIPENT 
    } else{ 
     $mail->SetFrom("set your email", "your name (or service name)"); 
     $mail->AddReplyTo("set your email","your name (or service name)"); 
     $address = $email; 
    } 

    $content=str_replace("\n", "<br>", $content); 
    $mail->Subject = $title; 
    $mail->MsgHTML($content); 
    $mail->AddAddress($address, $name); 
    $mail->CharSet='utf-8'; 

    if($att[0]!=''){ 
     foreach ($att as $at){ 
      $mail->AddAttachment($at); 
     } 
    } 

    if(!$mail->Send()) { 
     return false; //$mail->ErrorInfo; 
    } else { 
     return true; 
    } 
} 
+0

не могли бы вы рассказать мне немного больше о том, где добавить коды в мои коды? Я не уверен, как они будут работать с тем, что у меня уже есть, или если оно что-то заменит? –

+0

Да, вы должны установить свою регистрационную информацию. Я отметил, что там, где говорится «что-то», вы должны ввести эту информацию, которую у вас есть ... например, «ваш email_server» может быть почтовым. Comomedom.com ... ваше имя пользователя является вашим именем пользователя для учетной записи электронной почты ... является постоянным ... , когда вы хотите отправлять электронную почту, вы всегда вызываете эту функцию и задаете требуемую информацию ... $, какая переменная сообщает, получаете ли вы электронную почту или отправляете ... true принимает, false отправляет –

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