0

我似乎无法弄清楚我在发送带有文本文件附件的电子邮件时做错了什么。我没有收到电子邮件,没有看到任何错误。这一切都是新手,现在已经看了几个小时的示例和教程,而我所缺少的并不是突出。感谢您对此的任何帮助。

//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);
}
4

1 回答 1

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.';
}
?>
于 2013-02-04T10:21:17.930 回答