我有一个商业系统,可以从添加它们的代理商那里向客户发送电子邮件。
添加新代理后,会自动创建agent@domain.com。所以我希望我的电子邮件来自CompanyName - 代理邮件。这就是我试图解决的问题:
$headers = "From:".$companyname." ".$Agentmail."\r\n";
$headers = "Reply-To:".$Agentmail."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
但是,我收到来自“user”(user @ servername)的电子邮件,而reply-to
是正确的,如上所列。如果我删除了reply-to
,它的工作完美,收件箱中的电子邮件将显示为来自CompanyName,并且在打开时,它将是CompanyName(Agentmail),但是,此类电子邮件不会被发送到@hotmail地址这是一个很大的问题。
在你建议我完全将我的邮件方法切换到PHPMailer的方法之前,请考虑我在下面发送电子邮件的方式,它可能不符合你的建议。谢谢!
完整的电子邮件代码:
ob_start();
include("./email/mailtemplate.php");
$message = ob_get_clean();
$body = strtr($content, $replaceWord);
$headers = "From:".$companyname." ".$Agentmail."\r\n";
$headers = "Reply-To:".$Agentmail."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
mail($email, $subject, $message, $headers);
我在mailtemplate.php中回显$body
,因为它需要一些解析等.Mailtemplate.php只是html电子邮件模板。
由于
答案 0 :(得分:0)
好的,正如所承诺的,这是一种通过使用PHPMailer来避免错误的方法。如果您不知道PHPMAiler是否适合您,相信我有同样的问题,但它非常容易使用。
这是代码
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = "localhost";
$mail->SMTPAuth = true;
$mail->Username = $Agentmail;
$mail->Password = $smptpass;
$mail->From = $Agentmail;
$mail->FromName = $companyname;
$mail->addAddress($email, $CustomerFullName);
$mail->addReplyTo($Agentmail, $fullname);
$mail->isHTML(true);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->altBody = $altBody;
if(!$mail->send()) {
header("location:errorpage.php");
}
好的,所以这些都是变数。它完美无缺。有一件事,如果你正在制作一个商业系统,并且你担心将密码以纯文本形式存储在数据库中,那么你也没有!在存储它们之前加密它们并在将它们用于PHP Mailer之前解密它们。
对于上面的代码,我首先解密密码:
$cipher = new Cipher('encrypt');
$smptpass = $cipher->decrypt($cipheredpass);
为此,PHPMailer工作,您需要两个文件:
require_once "./PHPMailer/class.phpmailer.php";
require_once "functions.php";
PHPMailer存储在与我同名的文件夹中,因此请将路径更改为您放置的位置。至于functions.php,这里是如何处理加密/解密:
<?php
class Cipher {
private $securekey;
function __construct($textkey) {
$this->securekey = md5($_SERVER['SERVER_ADDR']);
}
function encrypt($input) {
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->securekey, $input, MCRYPT_MODE_ECB));
}
function decrypt($input) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->securekey, base64_decode($input), MCRYPT_MODE_ECB));
}
}
?>
正如您所看到的,我正在使用$_SERVER
来获取环境变量,因为系统将托管在各种计算机上,所以我需要一些始终存在的东西。在那之后,我md5()
它,只是为了额外的安全性。你可以把任何你想要的东西作为你的钥匙,这无所谓,我试图避免在多个系统上使用相同的密钥。您无需将密钥存储在任何位置。如果你有这样的functions.php文件,这里是如何进一步使用它:
$cipher = new Cipher('encrypt');
$variable = $cipher->encrypt($input); // For encrypting
$cipher = new Cipher('decrypt');
$variable = $cipher->decrypt($input); // For decrypting