2013-07-23 81 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发生了什么事的消息。