我不知道为什么它不起作用。据我所知,我的帖子请求它没有被接受......所以这是我的代码
<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();
?>
其他重要的事情要提。这是我的托管服务提供商给我的设置。而且我不确定我是否正确使用它们。我已尝试使用所有端口和主机,但只是得到相同的错误。
我非常感谢所有帮助:)
答案 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连接()失败
我发现我发送了我的$比赛变量空...或者说错误,但我仍然卡住你。 有人提出了一些想法吗?