【问题标题】:PHP Email From Supplied Address来自提供地址的 PHP 电子邮件
【发布时间】:2013-01-09 20:06:27
【问题描述】:

我有这个 PHP 脚本,我没有太多经验,但我提供了一封电子邮件,我希望使用该电子邮件地址发送电子邮件,它现在使用我的虚拟主机帐户的电子邮件地址...我该怎么办必须改变吗?

<?PHP

$ai_to    = urldecode($_GET['to']);
$ai_from  = urldecode($_GET['fr']);
$ai_su    = urldecode($_GET['su']);
$ai_bo    = str_replace("CRLF","\n", urldecode($_GET['bo']));
$ai_fname = urldecode($_GET['fi']);
$ai_fpath = $ai_fname;

$header  = "From: " . 'aiapis mail svc:' . " <" . $ai_from . ">\r\n";
$header .= "Reply-To: " . $ai_from . "\r\n";

if ($ai_fname != '')
{
$data = file_get_contents('php://input');
if (file_put_contents($ai_fpath, $data) === FALSE) die("Upload failed, sen cancelled.");
   $file_size = filesize($ai_fpath);

   if ($file_size > 10485760) die("> 10MB. Send cancelled.");


   $emtemp = 'emailtemp.log';
   $current = file_get_contents($emtemp);
   $current .= gmdate("Y-m-d\TH:i:s") . ", " . $ai_fname . ", " . round($file_size/1048576, 3) . "MB\n";
   file_put_contents($emtemp, $current);   

   $handle = fopen($ai_fpath, "r");
   $content = fread($handle, $file_size);
   fclose($handle);
   $content = chunk_split(base64_encode($content));

   $uid = md5(uniqid(time()));

   $header .= "MIME-Version: 1.0\r\n";
   $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
   $header .= "This is a multi-part message in MIME format.\r\n";
   $header .= "--".$uid."\r\n";
   $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
   $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
   $header .= $ai_bo."\r\n\r\n";
   $header .= "--".$uid."\r\n";
   $header .= "Content-Type: application/octet-stream; name=\"".$ai_fname."\"\r\n";
   $header .= "Content-Transfer-Encoding: base64\r\n";
   $header .= "Content-Disposition: attachment; filename=\"".$ai_fname."\"\r\n\r\n";
   $header .= $content."\r\n\r\n";
   $header .= "--".$uid."--";

   $sent = mail($ai_to, $ai_su, "", $header);
}
else $sent = mail($ai_to, $ai_su, $ai_bo, $header);

if ($sent)
{
   if ($ai_fname != '')
   {
      unlink($ai_fpath);
      echo "Email+attachment sent.";
   }
   else echo "Email sent.";
}
else echo "Mail server rejected email.";

?>

【问题讨论】:

  • 在我看来,FromReply-To 的标题设置正确。我认为您的网络托管服务提供商可能会在邮件转发时在他们的邮件服务器中覆盖这些内容(通常是错误配置)。与他们核实也是明智的。我过去曾见过这样的例子。

标签: php email email-attachments


【解决方案1】:

消息的发送者设置在这一行:

$header  = "From: " . 'aiapis mail svc:' . " <" . $ai_from . ">\r\n";

变量$ai_from是从一个名为“fr”的$_GET变量设置的(它来自这样的URL:http://www.google.com?fr=myemail@domain.net&amp;to=touraddress@domain2.net

这个脚本过去是否有效?

如果您不熟悉(30 岁以上)电子邮件 RFC,请不要使用 PHP mail function

改用库。

这两个很受欢迎:Swift MailerPHPMailer。我更喜欢 Swift Mailer,但两者都成功使用。我过去也使用过mail(),因为我有多年使用邮件的经验(使用 Delphi 和其他语言,所以我知道其中的怪癖)。

如果您还想使用 mail(),请注意,如果您在某些情况下没有正确使用它,您的电子邮件将无法在有或没有退回的情况下发送(因此您可能不知道它已失败)。此外,使用mail() 发送的电子邮件有时更容易被传送到垃圾邮件文件夹。

查看this example 并在 PHP 中以简单的方式正确发送邮件。

顺便说一句,我不隶属于他们。

【讨论】:

  • 当我为 PHPMailer 的首席开发人员 Andy Provost 工作时,我很幸运能够编写 PHPMailer 的一个(相当小的)部分。它是一个非常灵活和强大的 PHP 邮件库 :)
  • 我刚刚测试了这个脚本,它确实有效,但它总是从网络主机电子邮件地址发送。我应该更改您提供的第一行代码吗?顺便说一句,我使用 000.webhost.com。我查看了 WebHost PHP 配置,它说: sendmail_from = no value sendmail_path = /usr/local/bin/phpsendmail
  • @user2012141 当您使用 Swift Mailer 时,您使用了 setFrom() 方法并且它被您的主机覆盖了?如果是这种情况,而不是使用 sendmail,请使用您的 SMTP 服务器,这将起作用。见那里:swiftmailer.org/docs/sending.html#using-the-smtp-transport
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多