2014-02-08 276 views
0

我在我的網站上有一個人們可以參加活動的表單。他後面的代碼以這種方式工作:通過SMTP發送郵件?

1. 所有信息都保存在數據庫中。這部分做工精細

2. 代碼的第二部分發送電子郵件給我,並與他採訪了該信息(如保存在數據庫中同一信息),用戶

的問題是,電子郵件通過主機帳戶上的默認電子郵件未經身份驗證發送。我必須修改腳本以在我的主機帳戶下使用有效的電子郵件強制SMTP身份驗證來修復錯誤。現在腳本發送電子郵件,但它以所有ISP的垃圾郵件過濾器結束,因此用戶永遠不會收到電子郵件。

我不知道該怎麼做,或者創建代碼,以便腳本使用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」可以是mail.somedomain.com ...你的用戶名是你的電子郵件帳戶的用戶名......是不變的... 當你想發送電子郵件,你總是調用這個函數,並設置所需的信息... $誰變量告訴你,如果你正在收到電子郵件或發送...真正接收,假髮送 –