【问题标题】:PHPMailer and 100K file limit for attachments?PHPMailer和附件的100K文件限制?
【发布时间】:2012-05-04 18:06:29
【问题描述】:

我正在尝试将文件作为电子邮件附件发送,但由于某种原因,如果文件大于 100k,则即使我收到电子邮件发送的消息,电子邮件也不会通过。
这也可能是对 IIS smtp 设置中附件的限制,但是当我取消选中限制会话大小和限制邮件大小选项时,它并没有改变任何东西。今晚可能要重启服务器了……

不知道是php.ini设置还是什么。

<?
$path_of_attached_file = "Images/marsbow_pacholka_big.jpg";

require 'include/PHPMailer_5.2.1/class.phpmailer.php';
try {
    $mail = new PHPMailer(true); //New instance, with exceptions enabled

    $body = $message; //"<p><b>Test</b> another test 3.</p>";

    $mail->AddReplyTo("admin@example.com","Admin");

    $mail->From     = "admin@example.com";
    $mail->FromName = "Admin";

    $mail->AddAddress($to);
    $mail->Subject  = "First PHPMailer Message";
    $mail->AltBody  = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
    $mail->WordWrap = 80; // set word wrap

    $mail->MsgHTML($body);

    $mail->IsHTML(true); // send as HTML
    if($attach){
        $mail->AddAttachment($path_of_attached_file);
    }

    $mail->Send();
    echo 'Message has been sent.';
} catch (phpmailerException $e) {
    echo $e->errorMessage();
}
?>

【问题讨论】:

    标签: php iis phpmailer


    【解决方案1】:

    我可能错了,因为我不使用 IIS,但您提供的代码实际上会使用本机 MTA 而不是 SMTP。据我所知,您必须使用 IsSMTP() 方法让 PHPMailer 知道您打算使用 SMTP。

    类似这样的:

    <?
    $path_of_attached_file = "Images/marsbow_pacholka_big.jpg";
    
    require 'include/PHPMailer_5.2.1/class.phpmailer.php';
    try {
        $mail = new PHPMailer(true); //New instance, with exceptions enabled
    
        $body = $message; //"<p><b>Test</b> another test 3.</p>";
        $mail->IsSMTP(); // telling the class to use SMTP
        $mail->Host       = "mail.yourdomain.com"; // SMTP server
        $mail->SMTPDebug  = 2;
        $mail->SMTPAuth   = true;                  // enable SMTP authentication
        $mail->Host       = "mail.yourdomain.com"; // sets the SMTP server
        $mail->Port       = 25;                    // set the SMTP port 
        $mail->Username   = "yourname@yourdomain"; // SMTP account username
        $mail->Password   = "yourpassword";        // SMTP account password 
    
        $mail->AddReplyTo("admin@example.com","Admin");
    
        $mail->From     = "admin@example.com";
        $mail->FromName = "Admin";
    
        $mail->AddAddress($to);
        $mail->Subject  = "First PHPMailer Message";
        $mail->AltBody  = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
        $mail->WordWrap = 80; // set word wrap
    
        $mail->MsgHTML($body);
    
        $mail->IsHTML(true); // send as HTML
        if($attach){
            $mail->AddAttachment($path_of_attached_file);
        }
    
        $mail->Send();
        echo 'Message has been sent.';
    } catch (phpmailerException $e) {
        echo $e->errorMessage();
    }
    ?>
    

    【讨论】:

    • 是的,解决了它。这有点奇怪,因为 mail() 被配置为通过 php.ini 中的 SMTP 发送出去……我希望我知道为什么这不起作用。在我使用 PHPMail 之前,我试图对自己的标题进行编码,它将文件的内容放入电子邮件的正文中,而不是作为附件。所以消息大小不是我认为的问题。
    • 邮件说已发送,但从未出现,这也让我有点紧张。我刚刚给自己发送了一个 13mb 的附件,希望这意味着它已修复,但我希望我知道之前所有这些测试发生了什么。我找不到 php 或 smtp 中的错误日志条目。
    • PHP+IIS 组合有很多怪癖,这可能只是其中之一。虽然正如我已经说过的,我对 IIS 不太熟悉。
    【解决方案2】:

    您的代码实际上并未检查消息是否已发送。 您需要更改代码以检查发送方法的返回

    if ($mail->Send())
      echo 'Message has been sent.';
    else
      echo 'Sorry there was an error '.$mail->ErrorInfo;
    

    这应该会给你一个错误消息,说明如果它确实出错了会发生什么。

    【讨论】:

    • 补充说。仍然收到“消息已发送”消息。不知道服务器在 IIS 7 上运行是否重要
    • 检查您的邮件服务器的日志,听起来 php 正在将邮件添加到消息队列中,但随后邮件服务器拒绝或丢弃它。还要确保将其“发件人”发送到有效的电子邮件地址,以便在失败时收到退回邮件。
    • 我在日志中没有看到任何表明它失败的内容。如果我做一个小文件(例如 80k),那么它工作正常,所以我知道来自电子邮件不是问题。我找到了“限制消息大小”和“限制消息大小”选项,并没有选中这两个选项,但它没有做出任何改变。我今晚可能需要重新启动服务器,看看是否能解决问题。
    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 2016-10-28
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2021-09-10
    • 2020-12-05
    相关资源
    最近更新 更多