【问题标题】:PHPMailer With AJAX Does Not Send Attachments带有 AJAX 的 PHPMailer 不发送附件
【发布时间】:2016-09-02 06:49:39
【问题描述】:

我在一个简单的联系表单上使用 PHPMailer,并使用 jQuery AJAX 提交该表单。联系表单与 AJAX 一起按预期工作,现在一切正常,我正在解决这个问题。

通过 AJAX 提交表单时,PHPMailer 发送的电子邮件中不包含文件附件。

使用 jQuery AJAX 提交表单时如何发送附件?

【问题讨论】:

  • PHPMailer 与 Ajax 无关。您只是在处理错误的上传。将您的代码基于 PHPMailer 提供的多文件上传示例。
  • 您可能会发现 PHP 正在将 form-4-file 更改为 form_4_file。这可能有用stackoverflow.com/questions/1436166/…
  • 这是什么意思?我不能用'-'命名我的输入字段?这就是我的附件没有发送的原因吗?
  • 可能是文件名导致了问题。如果您已测试 if( isset($_FILES['form-4-file']) && $_FILES['form-4-file']['error'] == UPLOAD_ERR_OK ) 确实有效 - 例如通过回显“它有效”,然后尝试回显文件名。 stackoverflow.com/questions/11764156/… 也可能有帮助。
  • 当我禁用 AJAX 时收到文件。附件的 PHP 部分正在工作,当使用 AJAX 提交表单时,附件不起作用。使用 ajax 提交表单时我没有收到回显

标签: php ajax forms phpmailer attachment


【解决方案1】:

您需要设置邮件标题。一些标题示例如下:-

$header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $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 .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";

【讨论】:

  • 至少应该有 mime-version、content-type、content-transfer-encoding、content-disposition
  • PHPMailer 为您处理所有这些,无需做所有这些。
猜你喜欢
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多