0

我正在尝试使用 php 发送邮件。我正在使用 wampserver2.2 。我的php版本是5.4.3

这是我尝试过的代码:

<?php
 if(isset($_POST['submit']))
{
     $YourName = mysql_real_escape_string($_POST['YourName']);
     $From = mysql_real_escape_string($_POST['Email']);
     $Subject = mysql_real_escape_string($_POST['Subject']);
     $Message = mysql_real_escape_string($_POST['message']);
     $myEmailAdr = "umvss01@gmail.com";

        if (preg_match('/^[a-zA-Z][a-zA-Z0-9_-]+@[a-zA-Z]+[.]{1}[a-zA-Z]+$/', $From))
        {
             $headers = 'From: '.$From."\r\n".'Reply-To: '.$From;
             $Message = str_replace("\n.", "\n..", $Message);

             try
             {
                  ini_set("SMTP","ssl:smtp.gmail.com" );
                  ini_set("smtp_port","465");
                  $send = mail($myEmailAdr, $Subject, $Message, $headers ); // line 24
             }
             catch(PDOException $e)
             {
                  $error = $e->getMessage();
                  echo $error;
             }
        }
        else 
        {
            echo "Error in Mail Address Format";
        }
    }
?>

问题是当我尝试使用它时出现以下错误。第 24 行表示邮件功能。

警告:mail():无法在“ssl:smtp.gmail.com”端口 465 连接到邮件服务器,请验证 php.ini 中的“SMTP”和“smtp_port”设置或在 C:\wamp\www 中使用 ini_set() \UMVSS_Website\ContactScript.php 第 24 行

4

2 回答 2

2

PHPmail()函数不使用对 SMTP 服务器的身份验证,这通常会在连接到您尝试连接的公共服务器时导致错误。您可能想要使用可以进行身份​​验证的PHPMailer之类的库。

于 2013-09-05T12:08:28.547 回答
1

因此,GMail 需要 SMTP 身份验证。邮件不提供该接口。

查看 PHPMailer。这是连接到 GMail 的示例

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>PHPMailer - GMail SMTP test</title>
</head>
<body>
<?php

//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');

require '../class.phpmailer.php';

//Create a new PHPMailer instance
$mail = new PHPMailer();
//Tell PHPMailer to use SMTP
$mail->IsSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug  = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host       = 'smtp.gmail.com';
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port       = 587;
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';
//Whether to use SMTP authentication
$mail->SMTPAuth   = true;
//Username to use for SMTP authentication - use full email address for gmail
$mail->Username   = "username@gmail.com";
//Password to use for SMTP authentication
$mail->Password   = "yourpassword";
//Set who the message is to be sent from
$mail->SetFrom('from@example.com', 'First Last');
//Set an alternative reply-to address
$mail->AddReplyTo('replyto@example.com','First Last');
//Set who the message is to be sent to
$mail->AddAddress('whoto@example.com', 'John Doe');
//Set the subject line
$mail->Subject = 'PHPMailer GMail SMTP test';
//Read an HTML message body from an external file, convert referenced images to embedded, convert HTML into a basic plain-text alternative body
$mail->MsgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
$mail->AddAttachment('images/phpmailer_mini.gif');

//Send the message, check for errors
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
?>
</body>
</html>
于 2013-09-05T12:06:55.993 回答