【问题标题】:add smtp to php mail function using phpmailer使用 phpmailer 将 smtp 添加到 php 邮件功能
【发布时间】:2015-08-23 12:45:34
【问题描述】:

我正在尝试使用 phpmailer 添加 smtp 身份验证。我是 php 新手,我正在努力实现这一目标。 我有这个代码:

<?php
if( isset($_POST['name']) )
{
    $to = $_POST['budget'].',test@test.ro';
    $subject = 'Programare servicii'; 
    $message = 'Nume: ' . $_POST['name'] . "\n" .
                         'Prenume: ' . $_POST['company']. "\n" .
                         'E-mail: ' . $_POST['email']. "\n" .
                         'Telefon: ' . $_POST['phone']. "\n\n" .
                         'Doresc: ' . $_POST['interested']. "\n" .
                         'Magazin: ' . $_POST['budget']. "\n" .
                         'Incepand cu: ' . $_POST['start']. "\n" .
                         'Pana la: ' . $_POST['finish']. "\n" .
                         'Observatii: ' . $_POST['comment']. "\n\n\n";



  $num = md5(time());
  $headers = 'From:' . $_POST['name'] . "\r\n";
  $headers .= 'Reply-To:' . $_POST['email'] . "\r\n";
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .= "Content-Type: multipart/mixed; ";
  $headers .= "boundary=$num\r\n";
  $headers .= "--$num\r\n";$headers .= "Content-Type: text/plain\r\n";
  $headers .= "Content-Transfer-Encoding:8bit\r\n\n";
  $headers .= "$message\r\n";
  $headers .= "--$num\r\n";

    if( isset($_FILES['file']['tmp_name']) )
    {

        $file = fopen($_FILES['file']['tmp_name'], 'r');
      $size = $_FILES['file']['size'];
      $content = fread($file, $size);
      $encoded_content = chunk_split(base64_encode($content));      

        $headers .= "Content-Type: ". $_FILES['file']['type'] ."; ";
        $headers .= 'name="' . $_FILES['file']['name'] . '"' . "\r\n";
        $headers .= "Content-Transfer-Encoding: base64\r\n";
        $headers .= "Content-Disposition: attachment; ";
        $headers .= 'filename="' . $_FILES['file']['name'] . '"' . "\r\n\n";
        $headers .= "$encoded_content\r\n";
        $headers .= "--$num--";
    }
    mail($to, $subject, '', $headers);
}
?>

id如何添加认证?有任何想法吗?我阅读了 phpmailer 示例,并且能够使用 phpmailer 发送经过身份验证的电子邮件。问题是我无法让上面的代码与 smtp 身份验证一起使用。我的表单中有一个下拉菜单,用户可以从那里选择一个商店,脚本将向该商店发送电子邮件。当我将 $_POST['email'] 添加到 $mail->addAddress 时,没有任何反应。 感谢您的宝贵时间,

波格丹

更新 1: 我设法做到这一点:

<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();                               
$mail->Host = 'localhost';  
$mail->SMTPAuth = true;                          
$mail->Username = 'test@test.ro';           
$mail->Password = 'pass';     
$mail->SMTPSecure = 'tls';  
$mail->Port = 587;           
$mail->From = $_POST['email'];
$mail->FromName = $_POST['name'];
$mail->addAddress('need to get data from form', 'iohan test');   
$mail->addReplyTo('test@test.ro', 'Information');
$mail->addCC('test@test.ro');
$mail->isHTML(true);                                
$mail->Subject = 'test iohan';
$mail->Body    = 'bla bla bla';
$mail->AltBody = 'bla bla';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

问题是如何让它发挥作用。我有一个包含多封电子邮件的下拉菜单,我需要将电子邮件发送到用户选择的电子邮件。

【问题讨论】:

  • 请将您的代码减少到解释您的问题所需的最低限度,并添加更多关于您遇到的问题的详细信息。
  • 我正在尝试使用 php mailer 将 smtp 身份验证添加到上面的 php 代码中。

标签: php smtp phpmailer


【解决方案1】:

这里有一个非常简单的问题。你没有使用PHPMailer;您正在使用 PHP 的 mail() 函数,这根本不是一回事,并且不支持身份验证,因为它不使用 SMTP。我真的建议您甚至不要自己尝试这样做;让 PHPMailer 为您完成。自述文件中的示例应该足以让您继续前进。

您对标头所做的所有事情、创建消息正文、编码附件等都是不必要的。您的代码也容易受到标头注入攻击,并且可能具有错误编码的标头。您也没有安全地处理文件上传 - 请阅读 PHP 文档,或查看 PHPMailer 提供的“发送文件上传”示例。

假设您的表单如下所示(您不应直接从表单中获取目标电子邮件,因为它会将其打开为滥用垃圾邮件网关):

<select name="to">
    <option value="0">sales@example.com</option>
    <option value="1" selected>support@example.com</option>
    <option value="2">billing@example.com</option>
</select>

你可以这样处理:

$to = [
    0 => 'sales@example.com',
    1 => 'support@example.com',
    2 => 'billing@example.com',
];
$mail->addAddress($to[$_POST['to']]);

虽然你也应该做一些验证。

在您发布的代码中,您正在使用表单中的数据设置$mail-&gt;From - 您不应该这样做,因为它会导致邮件无法通过 SPF 检查;使用固定的发件人地址并将发件人的地址粘贴到回复中。

【讨论】:

  • 我现在正在使用 php 邮件功能。我需要的是将上面的代码转换为 phpmailer。有什么想法吗?
  • 呃,阅读文档和示例?他们告诉你如何做你的代码所做的一切,还有更多。
  • 做到了,但我没有设法使用变量向用户选择的内容发送电子邮件。
  • 如果您还没有发布代码,我们应该如何提供帮助?问题中的内容似乎与您想要的完全无关!
  • 我有上面的代码。我需要将其转换为 phpmailer 代码。我使用 phpmailer 中的示例代码来查看我的服务器是否一切正常,并且我设法发送电子邮件。现在我要转换 phpmailercode 中的上述代码以发送电子邮件
猜你喜欢
  • 2018-09-10
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2012-05-23
相关资源
最近更新 更多