Php 通过SMTP发送邮件?

Php 通过SMTP发送邮件?,php,email,smtp,send,Php,Email,Smtp,Send,我的网站上有一个表格,人们可以在那里参加活动。其背后的代码是这样工作的: 所有信息都保存在数据库中。这部分很好用 代码的第二部分向我和用户发送一封电子邮件,其中包含他输入的信息(与数据库中保存的信息相同) 问题是,这些电子邮件未经验证就通过托管帐户上的默认电子邮件发送。我不得不修改脚本以强制SMTP身份验证,并在我的托管帐户下使用有效的电子邮件来修复错误。现在,脚本会发送电子邮件,但它以spamfilter结尾,所有ISP都会发送,因此用户永远不会收到电子邮件 我不知道如何做,也不知道如何创

我的网站上有一个表格,人们可以在那里参加活动。其背后的代码是这样工作的:

  • 所有信息都保存在数据库中。这部分很好用

  • 代码的第二部分向我和用户发送一封电子邮件,其中包含他输入的信息(与数据库中保存的信息相同)

  • 问题是,这些电子邮件未经验证就通过托管帐户上的默认电子邮件发送。我不得不修改脚本以强制SMTP身份验证,并在我的托管帐户下使用有效的电子邮件来修复错误。现在,脚本会发送电子邮件,但它以spamfilter结尾,所有ISP都会发送,因此用户永远不会收到电子邮件

    我不知道如何做,也不知道如何创建代码以便脚本使用SMTP身份验证。下面是我的密码。有人能帮我吗

    <?
    // 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;
        }
    }