2013-07-23 74 views
0

我與附件發送郵件有問題。我有這個功能:(已解決)發送附件有問題的郵件

function mail_att($to, $subject, $message, $anhang) { 
    $absender = "Sender"; 
    $absender_mail = "[email protected]"; 
    $reply = "[email protected]"; 

    $path = $anhang; 
$uploadname = "Anhang.pdf"; 

$trenner = md5(time()); 
    // Mail Header 
    $mailheader = "Reply-To: " .$absender. "<" .$absender_mail. ">\r\n"; 
    $mailheader .= "Return-Path: ".$absender_mail."\r\n"; 
    $mailheader .= "Message-ID: <".$absender_mail.">\r\n"; 
    $mailheader .= "X-Mailer: PHP v" .phpversion(). "\r\n"; 
    $mailheader .= "From: ".$absender."<".$absender_mail.">\r\n"; 
    $mailheader .= "MIME-Version: 1.0\r\n"; 
    $mailheader .= "Content-Type: multipart/mixed;\r\n"; 
    $mailheader .= " boundary = " .$trenner; 
    $mailheader .= "\r\n\r\n"; 

    // Mailbody 
    $mailbody = "This is a multi-part message in MIME format\r\n"; 
    $mailbody .= "--" .$trenner. "\r\n"; 
    $mailbody .= "Content-Type: text/html; charset=UTF-8\r\n"; 
    $mailbody .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; 
    $mailbody .= $message. "\r\n\r\n"; 

    // Attachment 
    $mailbody .= "--" .$trenner. "\r\n"; 
    $mailbody .= "Content-Type: application/pdf; name=\"" .$uploadname. "\"\r\n"; 
    $mailbody .= "Content-Transfer-Encoding: base64\r\n"; 
    $mailbody .= "Content-Disposition: attachment; filename=\"" .$uploadname. "\"\r\n\r\n"; 
    $mailbody .= chunk_split(base64_encode(file_get_contents($path))); 
    $mailbody .= "\n"; 

    // Send 
    mail($to, htmlspecialchars($subject), $mailbody, $mailheader); 
} 

但是,當我想發送一封郵件時,我什麼也得不到。問題在哪裏?我確定我輸入正確的接收器電子郵件!郵件服務器沒有問題,因爲普通的電子郵件工作正常。

//編輯: 哦,我從來沒有想過要使用phpmailer。這使得所有簡單和它的作品。我所有的工作都是空虛的。但是,謝謝!

+3

簡單的答案:不要建立自己的啞劇電子郵件,尤其是附件。使用PHPMailer或Swiftmailer,它們都會將整個代碼塊減少到大約4或5行。同樣,你只是簡單地假設'mail()'正在工作。你檢查了它的返回值嗎?失敗時返回false。你有沒有檢查你的傳出服務器的郵件日誌?也許這封電子郵件已被轉儲爲垃圾郵件。 –

+0

你正在發送到gmail帳戶嗎?谷歌過濾電子郵件與他們認爲是「自動化」的來源發送附件臭名昭着。 –

+0

**你什麼都沒得到?**我看到你正在嘗試發送到>>'$ to' <<,但該變量**尚未定義**。它出現在某個地方的網絡空間。 **添加**'$ to =「[email protected]」;'** ** **下方的$回覆=「[email protected]」;'。 –

回答

0

Your'e使用PHP的內置mail()函數發送消息。

因此,PHP將嘗試通過在運行PHP的服務器上運行的本地MTA發送消息,如php.ini文件中的sendmail_path所指定。你首先要看的地方是本地MTA的日誌。
這些應該告訴你

  1. 無論是否本地MTA收到你的PHP腳本,如果是這樣,
  2. 當本地MTA試圖將郵件傳遞到遠程MTA發生了什麼事的消息。