Php 通过SMTP发送邮件?
我的网站上有一个表格,人们可以在那里参加活动。其背后的代码是这样工作的:Php 通过SMTP发送邮件?,php,email,smtp,send,Php,Email,Smtp,Send,我的网站上有一个表格,人们可以在那里参加活动。其背后的代码是这样工作的: 所有信息都保存在数据库中。这部分很好用 代码的第二部分向我和用户发送一封电子邮件,其中包含他输入的信息(与数据库中保存的信息相同) 问题是,这些电子邮件未经验证就通过托管帐户上的默认电子邮件发送。我不得不修改脚本以强制SMTP身份验证,并在我的托管帐户下使用有效的电子邮件来修复错误。现在,脚本会发送电子邮件,但它以spamfilter结尾,所有ISP都会发送,因此用户永远不会收到电子邮件 我不知道如何做,也不知道如何创
<?
// SEND OUT EMAIL PART
// COPY SEND TO MY SELF
$to = "my@email.com";
$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: my@email.com";
$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!"; }
}
}
?>
最好使用专用脚本发送电子邮件。例如,它为您提供了各种配置选项,包括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@email.com";
$mail->Password = "password";
$mail->Port = 465; // change port is required
这是一种方法。你需要包括
#在调用函数之前,在代码中的某个地方
包括($path_to_PHPMailer.“class.smtp.php”);
函数sendmail($email、$name、$title、$content、$who=false、$att=array(“”)){
//变量$email是发件人的电子邮件
//变量$name是发件人的名称
//变量$title是电子邮件的标题
//变量$content是电子邮件的内容
$mail=new PHPMailer();
$mail->IsSMTP();//告诉类使用SMTP
//DOUBLE$mail->Host=“您的电子邮件服务器”;//SMTP服务器
$mail->SMTPDebug=0;//启用SMTP调试信息(用于测试)
//1=错误和消息
//2=仅限信息
$mail->SMTPAuth=true;//启用SMTP身份验证
$mail->Host=“您的电子邮件服务器”;//设置SMTP服务器
$mail->Port=server Port;//设置GMAIL服务器的SMTP端口
$mail->Username=“您的用户名”;//SMTP帐户用户名
$mail->Password=“您的密码”//SMTP帐户密码
如果($谁){
$mail->SetFrom($email,$name);
$mail->AddReplyTo($email,$name);
$address=“设置您的电子邮件”;//收件人的电子邮件
}否则{
$mail->SetFrom(“设置您的电子邮件”、“您的姓名(或服务名称)”);
$mail->AddReplyTo(“设置您的电子邮件”、“您的姓名(或服务名称)”);
$address=$email;
}
$content=str_replace(“\n”,“
”,$content);
$mail->Subject=$title;
$mail->MsgHTML($content);
$mail->AddAddress($address,$name);
$mail->CharSet='utf-8';
如果($att[0]!=''){
foreach($att as$at){
$mail->AddAttachment($at);
}
}
如果(!$mail->Send()){
返回false;//$mail->ErrorInfo;
}否则{
返回true;
}
}
@Micakkef我是否只需将上述代码添加到我的代码之上,更改信息使其适合我的代码,上传PHPmailer,然后它就可以工作,或者我是否需要做一些额外的工作来让它工作?我不知道这个phpmailer是如何工作的。请看一下他们的网站,看看一个工作示例。您需要下载这些文件并将其包含在脚本中。你能告诉我更多关于在我的代码中添加代码的地方吗?我不知道tihs将如何与我的allready得到或它应该取代什么工作?是的,你必须设置你的登录信息。我注意到,这里写着你的“某物”,你必须输入你拥有的信息…例如,“你的电子邮件服务器”可以是mail.somedomain.com…你的用户名是你的电子邮件帐户的用户名…这是常量。。。当您想要发送电子邮件时,您总是调用此函数并设置所需信息…$谁变量告诉您是接收电子邮件还是发送…true是接收,false是发送
#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;
}
}