PhpMailer地址无效:(setFrom)

时间:2017-07-21 06:18:25

标签: php email web hosting phpmailer

我不知道为什么它不起作用。据我所知,我的帖子请求它没有被接受......所以这是我的代码

<meta charset="utf-8" type="text/html">

<?php
echo !extension_loaded('openssl')?"Not Available":"Available";
echo'<br>';
include 'PHPMailer/PHPMailerAutoload.php';
$name = $_POST['nombre'];
$mailfrom = $_POST['email'];
$context = $_POST['context'];

echo $name,$mailfrom,$context;
echo "<br>";

echo "<br>";
$subject = 'Information';
/*i'm not sure if i can use any gmail or it needs to be
  registred on my server admin panel*/
$to ="my@gmail.com";
define ('GUSER','my@gmail.com');
define ('GPWD','pass');


// make a separate file and include this file in that. call this function in that file.

function smtpmailer( $mailfrom, $name, $subject, $context) {
    global $error;
    $mail = new PHPMailer();  // create a new object
    $mail->IsSMTP(); // enable SMTP
    $mail->SMTPDebug = 2;  // debugging: 1 = errors and messages, 2 = messages only
    $mail->SMTPAuth = true;  // authentication enabled
    $mail->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for GMail
    $mail->SMTPAutoTLS = false;
    $mail->Host = 'ssl://smtp.gmail.com';
    $mail->Port = 587;
    $mail->CharSet = "UTF-8";

    $mail->Username = GUSER;
    $mail->Password = GPWD;
    $mail->SetFrom ($mailfrom); //here it's my error
    $mail->Subject = $subject;
    $mail->Body = $context;
    $mail->AddAddress('my@gmail.com');
    if(!$mail->Send()) {
        $error = 'Mail error: '.$mail->ErrorInfo;
        return false;
    } else {
        $error = 'Message sent!';
        return true;
    }
}
 smtpmailer();

  ?>

其他重要的事情要提。这是我的托管服务提供商给我的设置。而且我不确定我是否正确使用它们。我已尝试使用所有端口和主机,但只是得到相同的错误。

smtp settings

ports

我非常感谢所有帮助:)

3 个答案:

答案 0 :(得分:1)

不要这样做:

$mailfrom = $_POST['email'];
...
$mail->SetFrom($mailfrom);

即使$mailfrom是有效地址,这也是伪造的,您的邮件将无法通过SPF检查,并会被退回或最终进入垃圾邮件文件夹。这就是PHPMailer文档和示例告诉您不要这样做的原因。

第二个参数完全是可选的;调用setFrom而不是直接设置From的主要优点是它会立即验证地址,这样您就不需要等到尝试发送才能查找。

另外,你是通过gmail发送的,它不允许你从任意地址发送,只发送预定义的别名,所以它无论如何都不会工作。

正确的方法是:

$mail->setFrom('my@gmail.com');
if (!$mail->addReplyTo($mailfrom)) {
    echo 'Invalid email address';
    exit;
}

您还要设置Host $mail->Host = 'ssl://smtp.gmail.com';值,同时设置SMTPSecure = 'tls';这是不兼容的,不会起作用。将Host设置为普通smtp.gmail.com

如果您使用PHPMailer提供的gmail示例可以避免所有这些问题,那将会更加轻松。

答案 1 :(得分:1)

试试这个:

echo !extension_loaded('openssl')?"Not Available":"Available";
echo'<br>';
include 'PHPMailer/PHPMailerAutoload.php';

define ('GUSER','my@gmail.com');
define ('GPWD','pass');

$name       = $_POST['nombre'];
$mailfrom   = $_POST['email'];
$context    = $_POST['context'];

$subject    = 'Information';
$to         = "my@gmail.com";

smtpmailer($mailfrom, $name, $subject, $context);


// make a separate file and include this file in that. call this function in that file.

function smtpmailer($from, $name, $subject, $context) {
    global $error;
    $mail = new PHPMailer();                    // create a new object

    $mail->isSMTP();                            // Set mailer to use SMTP
    $mail->Host      = 'smtp.gmail.com';        // Specify main and backup SMTP servers
    $mail->SMTPAuth  = true;                    // Enable SMTP authentication
    $mail->CharSet   = "UTF-8";
    $mail->SMTPDebug = 2;                       // Enable verbose debug output
    $mail->isHTML(true);                        // Set email format to HTML


    $mail->Username = GUSER;                    // SMTP username
    $mail->Password = GPWD;                     // SMTP password

    //$mail->SMTPAutoTLS    = false;
    $mail->SMTPSecure   = 'tls';                // Enable TLS encryption, `ssl` also accepted
    $mail->Port         = 587;                  // TCP port to connect to

    $mail->setFrom($from,$name);            // Mail Form
    $mail->addAddress('my@gmail.com');          // Name is optional

    $mail->Subject = $subject;
    $mail->Body    = $context;

   if(!$mail->Send()) {
        $error = 'Mail error: '.$mail->ErrorInfo;
        return false;
    } else {
        $error = 'Message sent!';
        return true;
    }
}

答案 2 :(得分:0)

所以我提高了一点,但我得到了这个新错误...

  

SMTP错误:无法连接到服务器:连接被拒绝(111)2017-07-24 02:59:26 SMTP连接()失败

我发现我发送了我的$比赛变量空...或者说错误,但我仍然卡住你。 有人提出了一些想法吗?