如何使用Gmail SMTP服务器正确设置PHPMailer?

时间:2015-12-23 03:51:08

标签: php email

我有一个基本上有3个单选按钮的表单,可以让你选择一个你想要联系的工作人员。表单需要姓名,电子邮件和消息。我找不到它告诉我错误是什么。我有调试但不知道错误来自哪里。

我的目标是拥有它以便他们选择的人将通过电子邮件发送,并且当电子邮件发送时,它将被重定向到具有正确的工作人员信息的页面。然而,对于我的生活,我无法让这个工作。我相信一切正常但是当我插入我在SO上找到的代码连接到SMTP服务器并通过电子邮件发送联系表单输入时,我的formProcess.php会中断。

编辑:在这里的一些人的帮助下,我找到了解决我遇到的两个错误的方法。但是现在我已经修复了这些错误,我得到了一个不同的错误。我现在收到这个:

2015-12-23 04:42:59 SMTP错误:无法连接服务器:无法分配内存(12)2015-12-23 04:42:59 SMTP connect()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting 2015-12-23 04:42:59 SMTP错误:无法连接服务器:无法分配内存(12)2015-12-23 04:42:59 SMTP connect()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

警告:无法修改标题信息 - 已在第80行的/www/contact/formProcess.php中发送的标题(///tact/phpmailer/class.smtp.php:234开始输出)

编辑2:我已将其上传到我的托管服务器。它解决了上面提到的错误。我现在遇到密码失败的问题,即使我已使用我在代码中使用的密码登录。

,而不是复制/粘贴错误消息,您可以在my site上看到它

编辑3 我刚刚注意到Gmail发来一封电子邮件,说“有人试图通过不符合标准安全标准的应用登录您的Google帐户。”这不可能是巧合吗?这是我无法连接的原因吗?如果是这样,我该怎么做才能达到安全标准?

编辑4:我现在一切正常,除了两件事。 1,由于某种原因,它发送电子邮件两次。我不知道为什么,但我觉得我可以搞清楚。我现在遇到的真正问题是我现在想要将Googles reCAPTCHA包含在我的表单中。一切正常,直到我添加了一些代码,我认为如果reCAPTCHA成功,并且它不仅仅是在我的代码中添加错误,而是在我输入下面的代码后,我的代码中断了。

$curl = curl_init(); 

curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => [
       'secret'=>'Well it says secret for a reason!',
       'response'=> $_POST['g-recaptcha-response']
    ]
]);

$response = json_decode(curl_exec($curl));

if (!$response->success){
    $errors[] = 'There was a problem with reCAPTCHA, please try again.';
};

而bellow是处理表单的所有代码。

<?php

session_start();
ini_set('display_errors', 1); error_reporting(E_ALL);

require_once 'PHPMailerAutoload.php';

$errors = [];
$toWho ='';

if(isset($_POST['name'], $_POST['email'], $_POST['message'],     $_POST['who'])){

$fields = [
  'name' => $_POST['name'],  
  'email' => $_POST['email'],  
  'message' => $_POST['message'],
  'who' => $_POST['who']
];

foreach($fields as $field => $data) {
    if(empty($data)) {
        $errors[] ='The ' .$field. ' field is required.';
    }
}

    if ($fields['who'] ==  "staff1") {
    $toWho = 'staff1@domain.com';
} else if ($fields['who'] == "staff2")  {
    $toWho = 'staff2@domain.com';
} else {
    $toWho = 'staff3@domain.com';
}






$curl = curl_init(); 

curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => [
       'secret'=>'Well it says secret for a reason!',
       'response'=> $_POST['g-recaptcha-response']
    ]
]);

$response = json_decode(curl_exec($curl));

if (!$response->success){
    $errors[] = 'There was a problem with reCAPTCHA, please try again.';
};









if(empty($errors)) {

    $mail = new PHPMailer;



    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->smtpSecure = 'tls';
    $mail->Port = 587;

//        $mail->SMTPDebug = 3;

    $mail->Host = 'mailen3.cloudsector.net';

    $mail->From = "No-reply@domain.com";
    $mail->Username = 'No-Reply@domain.com';
    $mail->Password = 'PAsswoRD';

    $mail->SetFrom("No-reply@domain.com", "No Reply" );
    $mail->AddReplyTo($fields['email'], $fields['name']);
    $mail->AddAddress($toWho, $fields['who']);

    $mail->Subject    = $fields['name'] . ' wants to talk!';
    $mail->Body       = 'From: ' .$fields['name']. ' (' .$fields['email']. ') ' .$fields['message']. ;




    $mail->send();


    if($mail->send()) {
        header('Location: ../../' .$fields['who']. 'thanks.php');
        die();
    }else {
        $errors[] = 'Sorry! Something went wrong and your message could not be sent. Please try again ';
    }


}


} else {
     $errors[] = 'Something went wrong.';
 }

 $_SESSION['errors'] = $errors;
 $_SESSION['fields'] = $fields;

 header('Location: index.php');
 ?>

1 个答案:

答案 0 :(得分:0)

尝试通过在脚本顶部添加以下代码来显示错误:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

如果您收到服务器错误500,请尝试注释掉小块代码,直到脚本运行。这样你就可以发现问题。