2014-02-08 280 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 ...你的用户名是你的电子邮件帐户的用户名......是不变的... 当你想发送电子邮件,你总是调用这个函数,并设置所需的信息... $谁变量告诉你,如果你正在收到电子邮件或发送...真正接收,假发送 –