【问题标题】:Emailing attachments with SMTP Relay使用 SMTP 中继通过电子邮件发送附件
【发布时间】:2014-05-07 09:18:18
【问题描述】:

我目前有一台服务器将电子邮件中继到一个主邮件服务器,但是当我尝试发送带有附件的邮件时,它会出现:

Content-type:text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Email message
Content-Type: application/octet-stream; name="test.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.pdf"

有没有办法解决这个问题?

【问题讨论】:

    标签: php email smtp


    【解决方案1】:

    试试这个

    <?php
    //define the receiver of the email
    $to = 'youraddress@example.com';
    //define the subject of the email
    $subject = 'Test email with attachment';
    //create a boundary string. It must be unique
    //so we use the MD5 algorithm to generate a random hash
    $random_hash = md5(date('r', time()));
    //define the headers we want passed. Note that they are separated with \r\n
    $headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
    //add boundary string and mime type specification
    $headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
    //read the atachment file contents into a string,
    //encode it with MIME base64,
    //and split it into smaller chunks
    $attachment = chunk_split(base64_encode(file_get_contents('attachment.zip')));
    //define the body of the message.
    ob_start(); //Turn on output buffering
    ?>
    --PHP-mixed-<?php echo $random_hash; ?> 
    Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
    
    --PHP-alt-<?php echo $random_hash; ?> 
    Content-Type: text/plain; charset="iso-8859-1"
    Content-Transfer-Encoding: 7bit
    
    Hello World!!!
    This is simple text email message.
    
    --PHP-alt-<?php echo $random_hash; ?> 
    Content-Type: text/html; charset="iso-8859-1"
    Content-Transfer-Encoding: 7bit
    
    <h2>Hello World!</h2>
    <p>This is something with <b>HTML</b> formatting.</p>
    
    --PHP-alt-<?php echo $random_hash; ?>--
    
    --PHP-mixed-<?php echo $random_hash; ?> 
    Content-Type: application/zip; name="attachment.zip" 
    Content-Transfer-Encoding: base64 
    Content-Disposition: attachment 
    
    <?php echo $attachment; ?>
    --PHP-mixed-<?php echo $random_hash; ?>--
    
    <?php
    //copy current buffer contents into $message variable and delete current output buffer
    $message = ob_get_clean();
    //send the email
    $mail_sent = @mail( $to, $subject, $message, $headers );
    //if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
    echo $mail_sent ? "Mail sent" : "Mail failed";
    ?> 
    

    【讨论】:

      【解决方案2】:

      正如 lemirage 所建议的,在 PHP 中滚动您自己的 MIME 编码将起作用。但是使用phpmailer可能更简单。 phpmailer 易于使用,用于发送带有附件的消息,并且设置简单——只需将几个 PHP 文件复制到您的服务器。见https://github.com/PHPMailer/PHPMailer

      【讨论】:

        猜你喜欢
        • 2015-01-11
        • 2014-10-27
        • 1970-01-01
        • 2011-04-06
        • 2017-05-12
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多