2016-02-16 60 views
2

我通過PHP mail()函數發送帶有附件的信件,它的工作過程中沒有任何錯誤出現。消息直接發送到接收器,並保持所有文本不變。 問題是我發送消息的附件(PDF和圖像)如果我向GMail地址發送消息,但是如果我發送消息給其他郵件(我試過Mail.ru和一些網站郵件),它們會損壞。 如果我將消息轉發給GMail,它們仍然損壞,無法打開。但是,如果我將GMail的未損壞郵件轉發到其他郵件地址,則文件沒問題。 如果信息完全一樣,怎麼可能呢?PHP郵件()函數發送帶有或不帶有損壞的附件到不同的郵件系統

回答

1

我使用mail()函數遇到同樣的問題,我的建議是使用PHPMailer並通過SMTP發送電子郵件。

下面是使用PHPMailer的一小段代碼:

<?php 
require 'PHPMailerAutoload.php'; 

$mail = new PHPMailer; 

//$mail->SMTPDebug = 3;        // Enable verbose debug output 

$mail->isSMTP();          // Set mailer to use SMTP 
$mail->Host = 'smtpserver.com'; // Specify main SMTP server. If you dont have one us GMAL or mandrill 
$mail->SMTPAuth = true;        // Enable SMTP authentication 
$mail->Username = '[email protected]';     // SMTP username 
$mail->Password = 'pass';       // SMTP password 
$mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 587;         // TCP port to connect to 

$mail->setFrom('[email protected]', 'Mailer'); 
$mail->addAddress('[email protected]', 'Joe User');  // Add a recipient 
$mail->addAddress('[email protected]');    // Name is optional 
$mail->addReplyTo('[email protected]', 'Information'); 
$mail->addCC('[email protected]'); 
$mail->addBCC('[email protected]'); 

$mail->addAttachment('/var/tmp/file.tar.gz');   // Add attachments 
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name 
$mail->isHTML(true);         // Set email format to HTML 

$mail->Subject = 'Here is the subject'; 
$mail->Body = 'This is the HTML message body <b>in bold!</b>'; 
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 

if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent'; 
} 
+0

謝謝!像我這樣的所有問題的實際答案是停止使用本地郵件()附件實現。 PHPMailer(或YiiMailer,在我的情況下)從字面上更好地執行郵件發送,並且使代碼更清晰。 – Firellon

0

我用斯威夫特梅勒對許多項目和從未有過的問題,具有良好的文檔,容易比其他框架來使用。