我试图使用phpmailer添加smtp身份验证。我是php的新手,我正在努力实现这一目标。 我有这个代码:
<?php
if( isset($_POST['name']) )
{
$to = $_POST['budget'].',test@test.ro';
$subject = 'Programare servicii';
$message = 'Nume: ' . $_POST['name'] . "\n" .
'Prenume: ' . $_POST['company']. "\n" .
'E-mail: ' . $_POST['email']. "\n" .
'Telefon: ' . $_POST['phone']. "\n\n" .
'Doresc: ' . $_POST['interested']. "\n" .
'Magazin: ' . $_POST['budget']. "\n" .
'Incepand cu: ' . $_POST['start']. "\n" .
'Pana la: ' . $_POST['finish']. "\n" .
'Observatii: ' . $_POST['comment']. "\n\n\n";
$num = md5(time());
$headers = 'From:' . $_POST['name'] . "\r\n";
$headers .= 'Reply-To:' . $_POST['email'] . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; ";
$headers .= "boundary=$num\r\n";
$headers .= "--$num\r\n";$headers .= "Content-Type: text/plain\r\n";
$headers .= "Content-Transfer-Encoding:8bit\r\n\n";
$headers .= "$message\r\n";
$headers .= "--$num\r\n";
if( isset($_FILES['file']['tmp_name']) )
{
$file = fopen($_FILES['file']['tmp_name'], 'r');
$size = $_FILES['file']['size'];
$content = fread($file, $size);
$encoded_content = chunk_split(base64_encode($content));
$headers .= "Content-Type: ". $_FILES['file']['type'] ."; ";
$headers .= 'name="' . $_FILES['file']['name'] . '"' . "\r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; ";
$headers .= 'filename="' . $_FILES['file']['name'] . '"' . "\r\n\n";
$headers .= "$encoded_content\r\n";
$headers .= "--$num--";
}
mail($to, $subject, '', $headers);
}
?>
id如何添加身份验证?有任何想法吗?我阅读了phpmailer示例,我能够使用phpmailer发送经过身份验证的电子邮件。问题是我无法获得上面的代码来使用smtp身份验证。我的表单中有一个下拉列表,用户可以从中选择商店,脚本将向该商店发送电子邮件。当我将$ _POST [&#39; email&#39;]添加到$ mail-&gt; addAddress时,没有任何反应。 谢谢你的时间,
的Bogdan
更新1: 我想这样做:
<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'localhost';
$mail->SMTPAuth = true;
$mail->Username = 'test@test.ro';
$mail->Password = 'pass';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->From = $_POST['email'];
$mail->FromName = $_POST['name'];
$mail->addAddress('need to get data from form', 'iohan test');
$mail->addReplyTo('test@test.ro', 'Information');
$mail->addCC('test@test.ro');
$mail->isHTML(true);
$mail->Subject = 'test iohan';
$mail->Body = 'bla bla bla';
$mail->AltBody = 'bla bla';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
问题是如何使其发挥作用。我有一个包含多封电子邮件的下拉菜单,我需要向用户选择的电子邮件发送电子邮件。
答案 0 :(得分:1)
这里有一个非常简单的问题。您没有使用PHPMailer;您正在使用PHP的mail()
功能,这根本不是同一个功能,并且不支持身份验证,因为它不使用SMTP。我真的建议你不要自己尝试这样做;让PHPMailer为你做。自述文件中的示例应足以让您前进。
您不需要使用标题,创建邮件正文,编码附件等所有内容。您的代码也容易受到标头注入攻击,并且标头编码可能不正确。您还没有安全地处理文件上传 - 请阅读上面的PHP文档,或者查看“发送文件上传文件”。 PHPMailer提供的示例。
假设您的表单看起来像这样(您不应该直接从表单中获取目标电子邮件,因为它会将其作为垃圾邮件网关滥用):
<select name="to">
<option value="0">sales@example.com</option>
<option value="1" selected>support@example.com</option>
<option value="2">billing@example.com</option>
</select>
您可以像这样处理:
$to = [
0 => 'sales@example.com',
1 => 'support@example.com',
2 => 'billing@example.com',
];
$mail->addAddress($to[$_POST['to']]);
虽然你也应该做一些验证。
在您发布的代码中,您使用表单中的数据设置$mail->From
- 您不应该这样做,因为它会导致邮件无法通过SPF检查;使用固定的地址并将发件人的地址粘贴到回复中。