使用PHPMailer进行发送只能使用一个地址,而不能使用另一个地址

时间:2019-06-12 07:47:18

标签: phpmailer

我一直在使用电子邮件地址通过PHPMailer发送,我正在成功获取用户信息,但是当我使用其他电子邮件地址时,它无法发送。 我也尝试更改端口号25/2525而不是587。

这是HTML5和Javascript注册表格,用于将用户详细信息发送到contact.mailer.php。

$fileNameSubmitterName=str_replace(' ', '_', $name);
$target_path = "/var/www/html/cdl/uploads/";

$target_path = $target_path .$fileNameSubmitterName.'_'.basename( $_FILES['test_upload_image']['name']); 
print_r(" target path "+ $target_path);

if(move_uploaded_file($_FILES['test_upload_image']['tmp_name'], $target_path)) {
  // echo "The file ".  basename( $_FILES['test_upload_image']['name']). " has been uploaded";
} else {
   //echo "There was an error uploading the file, please try again!";
}

$to = "aa@gmail.com";

$from=$email;
$from_name= "india";
$subject = "Feedback from india.org website";
//$body="Test Body-";

$message = " Name: " . $name . "\r\n Email: " . $email . "\r\n Phone: " . $phone . "\r\n address: " . $address . "\r\n Qualification: " . $qualification . "\r\n number:" . $number . "\r\n date:" . $date . "\r\n bank:" . $bank . "\r\n Feedback: " . $feedback;
$mail = new PHPMailer();  // create a new object

$error='';
$mail->IsSMTP(); // enable SMTP
//print_r("sta2");

$mail->SMTPDebug = 0;  // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true;  // authentication enabled
$mail->SMTPSecure = 'tsl'; // secure transfer enabled REQUIRED for GMail
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587; 
$mail->Username = "india@gmail.com";  
//$mail->Username = "vaag@gmail.com";  
//print_r("sta2");
//$mail->Password = "pr"; 
$mail->Password = "br"; 
$mail->SetFrom($from, $from_name);
$mail->Subject = $subject;
$mail->Body = $message;
$mail->AddAddress($to);
$mail->addAttachment($target_path); 
//print_r("stage1");

if(!$mail->Send()) {        
    echo '<script type="text/javascript">alert("Message not sent. Please try again!.");</script>';

    print "<script>document.location.href='institute.org';</script>";
} else {
    echo '<script type="text/javascript">alert("Message sent succesfully. We will conact you soon.");</script>';
    print "<script>document.location.href=institute.org';</script>";
}

//print_r($error);
}

?>

我必须向未发送的其他电子邮件地址发送相同的输入字段。

1 个答案:

答案 0 :(得分:0)

首先,您似乎正在使用旧版本的PHPMailer,并且您的代码基于一个过时的示例。我建议您再次使用the latest versionthe contact form example provided with PHPMailer

您确实有一个简单的错字:

$mail->SMTPSecure = 'tsl';

应该是

$mail->SMTPSecure = 'tls';

您的代码未显示$email的来源,但是您将其放入消息正文中,我假设它是由用户在表单字段中提供的,然后由您输入这样做:

$from=$email;
$mail->SetFrom($from, $from_name);

这是伪造的,不适用于gmail。改为这样做:

$mail->setFrom('india@gmail.com', $from_name);
$mail->addReplyTo($_POST['email']);
$mail->addAddress($to);

这样,您将不会伪造发件人地址,但答复将转到提交者的地址。请注意,即使您设置了“发件人”名称,您的电子邮件客户端也可能会忽略它,而使用您从同一地址看到的以前的名称-这是您无法控制的。

您可以简单地使用$mail->Port = 25;将端口号设置为25或2525,但是,由于要通过gmail发送,因此应坚持使用587,因为这是用于使用STARTTLS进行加密的SMTP提交的正确端口(您可以通过设置SMTPSecure = 'tls'进行选择;另一种方法是在端口465上使用'ssl'模式)。

总体而言,您根本不会进行任何错误检查,因此您的脚本将允许使用无效的电子邮件地址。 PHPMailer联系人表单示例显示了正确的处理方法。