当前位置: 首页 > 知识库问答 >
问题:

使用PHP mailer发送带有附件的邮件时出错:交易失败:缺少开始边界SMTP代码: 554

仲孙奇
2023-03-14

我试图发送PHP邮件与pdf附件和它显示此错误:电子邮件未发送。错误:SMTP错误:不接受数据。SMTP服务器错误:DATA END命令失败详细信息:事务失败:缺少开始边界SMTP代码:554

我试图在所有地方添加哑剧边界,但结果相同。

<?php
include dirname(__FILE__) . '/../views/pdf-receipt.php';

function sendMailTest(
    $recipient_mail, $recipient_name, $from_mail, $from_name, $subject, $body, $body_without_html, $attachments=NULL
) {
    require 'folder/PHPMailer-5.2.26/PHPMailerAutoload.php';
    $mail = new PHPMailer;

    try {
        $mail->isSMTP();
        $mail->setFrom($from_mail, $from_name);
        $mail->addAddress($recipient_mail, $recipient_name);
        $mime_boundary = "Name of company".md5(time());
        $mail->SMTPDebug = true;
        $mail->Host = 'email-smtp.eu-west-1.amazonaws.com';
        $mail->Username = 'XXX';
        $mail->Password = 'XXX';

        $mail->Encoding = 'quoted-printable';
        $mail->addCustomHeader('Content-ID', '20cca', 'Content-Type', 'multipart/mixed', 'boundary='.$mime_boundary.'\n');
        $mail->Body = "--$mime_boundary\n";

        $mail->CharSet = 'UTF-8';
        $mail->Subject = utf8_encode($subject);

        $mail->Body .= "Hey\n";

        $mail->AltBody .= "--$mime_boundary\n".$body_without_html;

        $mail->SMTPAuth = true;

        $mail->SMTPSecure = 'tls';
        $mail->Port = 000;

        $mail->isHTML(true);
        $data = '%PDF-1.2 6 0 obj << /S /GoTo /D (chapter.1) >>';       
        // if i comment line below email is sent properly, 
        // if i use AddAttachment local pdf file its working also, 
        // but i use TCPD generated PDF and attaching it, if i will 
        // just write it out to the message body i will see it as a 
        // text or if i will attach 'addStringEmbeddedImage' its 
        //displayed correctly but on same line as message text

        // $attachments is pretty much this:
        // $pdf->Output("test.pdf", "S");
        // tried this $mail->Body .= "--$mime_boundary\n"; before next line
        // did not help
        $mail->AddStringAttachment($attachments, 'base64', 'application/pdf');

        if($mail->send()) {
            return;
        }
    } catch (Exception $e) {}

    echo 'E-mail not sent. Error: ', $mail->ErrorInfo, PHP_EOL;
}
?>

我希望电子邮件发送附件,但没有看到起始边界错误。

共有1个答案

段干麒
2023-03-14

首先,我真的希望您没有实际使用PHP 5.2。

在这里,你正在尝试射击自己的脚:

    $mail->addCustomHeader('Content-ID', '20cca', 'Content-Type', 'multipart/mixed', 'boundary='.$mime_boundary.'\n');
    $mail->Body = "--$mime_boundary\n";

使用PHPMailer的原因是,您不必做这样的事情;已经为你准备好了。当你试图像这样颠覆它时,它只会变得一团糟,正如你所发现的。

您已经努力将PHPMailer代码包装在try/catch块中,但是您没有告诉PHPMailer抛出异常(通过将true传递给构造函数),并且您的catch块是空的,所以它什么也不做。

我重写了它以修复这些问题,并更合理地分组设置:

include dirname(__FILE__) . '/../views/pdf-receipt.php';

function sendMailTest(
    $recipient_mail,
    $recipient_name,
    $from_mail,
    $from_name,
    $subject,
    $body,
    $body_without_html,
    $attachments = null
) {
    require_once 'folder/PHPMailer-5.2.26/PHPMailerAutoload.php';
    $mail = new PHPMailer(true);

    try {
        $mail->isSMTP();
        $mail->SMTPDebug = 2;
        $mail->Host = 'email-smtp.eu-west-1.amazonaws.com';
        $mail->SMTPSecure = 'tls';
        $mail->Port = 587;
        $mail->SMTPAuth = true;
        $mail->Username = 'XXX';
        $mail->Password = 'XXX';

        $mail->CharSet = 'UTF-8';
        $mail->setFrom($from_mail, $from_name);
        $mail->addAddress($recipient_mail, $recipient_name);
        $mail->Subject = $subject;

        $mail->Body .= $body;
        $mail->AltBody = $body_without_html;

        $mail->isHTML(false);
        $data = '%PDF-1.2 6 0 obj << /S /GoTo /D (chapter.1) >>';

        $mail->addStringAttachment($data, 'receipt.pdf');

        $mail->send();
    } catch (Exception $e) {
        echo 'E-mail not sent. Error: ', $mail->ErrorInfo, PHP_EOL;
    }
}
 类似资料:
  • 我无法发送带有文本附件的电子邮件(没有附件,一切正常)。我正在使用actionmailer 3.2。11并尝试通过亚马逊SES发送电子邮件。在我看来,amazon snmp服务器与我生成的电子邮件有问题。生成电子邮件的代码如下所示: 发送邮件时出现错误消息:。 产生的邮件如下所示: 将其作为测试邮件发送给SES也会导致“缺少开始边界”。所以我认为交付的内容一定有问题。 在视图文件夹中,只有一个.t

  • 我需要将邮件从我的gmail帐户发送到另一个帐户。我使用了以下代码。 但我得到的错误如下。。。javax。邮政MessaginException:无法连接到SMTP主机:SMTP。gmail。com,端口:25 我该怎么解决这个问题。你能帮我吗?

  • 我使用了phpmailer()概念,使用php脚本从共享服务器向用户发送邮件,但根据phpmailer代码,即使脚本中的所有内容都正确,我也无法发送邮件。 我的代码如下: 注意:我使用“GMail”作为我的SMTP服务器,SMTPSecure是“ssl”,端口是“465”,用户名是 我使用了VPS共享服务器,并将我的php脚本保存在该服务器上。 我认为我的php脚本没有问题,我不知道为什么它不起作

  • 我一直在用代表我的office365帐号发送SMTP邮件,工作了大概一个星期,然后突然不工作了,不知道怎么变了。 当我在PHPMailer中启用high debug logging时,我看到: SMTP- 这篇文章似乎是最相关的: 不接受来自服务器的身份验证:504 5.7.4无法识别的身份验证类型 以下是我交给PHPMailer的文字SMTP设置: 以及实际的PHP代码: 作为理智检查,我在中使

  • 我正在使用谷歌的邮件服务器发送电子邮件。对于电子邮件发送,我使用PHPMailer。这是我在示例中使用的代码片段。com/contactus站点: 代码向我发送了一封电子邮件(support@example.com)其标题为: 问题是,当我使用不同的地址作为用户名和密码进行身份验证时,消息不会被发送。错误是: 我不知道为什么它与我每天使用的私人gmail帐户一起工作,为什么它不与我拥有的其他gma

  • 我使用的PHPMailer表格在这里找到。 从网站下载的示例是“接触-3”,在引导主题中使用PHPMailer通过gmail发送SMTP电子邮件。当我使用“接触-1”时,它完全适用于我的托管域电子邮件地址,但SMTP版本适用于gmail地址,联系人表单不会提交。 在下面的代码中,我更改了以下行以添加我的gmail地址和gmail密码: 任何关于使用给定信息进行此工作的帮助都将不胜感激-提前感谢!