尝试发送带附件的电子邮件

时间:2013-02-04 10:13:22

标签: php email

我似乎无法理清我在这里发送的带有文本文件附件的电子邮件的错误。我没有收到电子邮件,看不到任何错误。所有这一切的新手,现在看几个小时的例子和教程,我缺少的东西并不突出。感谢您的帮助。

//core/email_cfg.php

function mail_attachment($git_messages, $file) 
{
    $filename = basename($file);
    //define the receiver of the email
    $to = 'whoever@domain.com';

    //define the subject of the email
    $subject = 'Change to Config File '.$filename;

    //message
    $username = isset($_SESSION["username"]) ? $_SESSION["username"] : 'Unknown User';
    $message = 'Notification: The config file named '.$filename. ' was changed by USER='.$username.', GIT Results: '. $git_messages;

    //from:
    $from = "SomeUserEmail@domain.com"; 

    //how do we fit this in?
    //\r\nReply-To: no_reply@domain.com\r\n

    // $file should include path and filename
    $file_size = filesize($file);
    $content = chunk_split(base64_encode(file_get_contents($file))); 
    $uid = md5(uniqid(time()));
    $from = str_replace(array("\r", "\n"), '', $from); // to prevent email injection
    $header = "From: ".$from."\r\n"
          ."MIME-Version: 1.0\r\n"
          ."Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"
          ."This is a multi-part message in MIME format.\r\n" 
          ."--".$uid."\r\n"
          ."Content-type:text/plain; charset=iso-8859-1\r\n"
          ."Content-Transfer-Encoding: 7bit\r\n\r\n"
          .$message."\r\n\r\n"
          ."--".$uid."\r\n"
          ."Content-Type: text/html; charset=iso-8859-1\r\n"
          ."Content-Transfer-Encoding: 7bit\r\n\r\n"
          .$message."\r\n\r\n"
          ."--".$uid."\r\n"               
          ."Content-Type: text/plain; name=\"".$filename."\"\r\n"
          ."Content-Transfer-Encoding: base64\r\n"
          ."Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"
          .$content."\r\n\r\n"
          ."--".$uid."--"; 
    return mail($to, $subject, "", $header);
}

1 个答案:

答案 0 :(得分:0)

就个人而言,如果您尝试发送附件,那么考虑使用库可能是一个好主意,因为在PHP中直接使用它可能相当棘手。

例如,我使用PHPMailer

您可以通过以下方式轻松发送附件:     

$mail = new PHPMailer();

$mail->IsSMTP();  // telling the class to use SMTP
$mail->Host     = "smtp.example.com"; // SMTP server

$mail->From     = "from@example.com";
$mail->AddAddress("myfriend@example.net");

$mail->Subject  = "First PHPMailer Message";
$mail->Body     = "Hi! \n\n This is my first e-mail sent through PHPMailer.";
$mail->WordWrap = 50;

$mail->AddAttachment("fileNameToAttach");

if(!$mail->Send()) {
  echo 'Message was not sent.';
  echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
  echo 'Message has been sent.';
}
?>