-3

我对 php 相当陌生,并且不熟悉电子邮件标头。这是一个基于我遇到/更新以使用文件对象的一些代码的函数。结果是“文件发送成功得到回显,但电子邮件从未收到。我只能假设这与这个东西生成的电子邮件标题有关。希望有人看到这里出了什么问题:

function mail_attachment ($from , $to, $subject, $message, $attachment){ 
    $fileatt = $attachment["tmp_name"];
    $fileatt_type = "application/octet-stream";
    $fileatt_name = $attachment["name"]; 
    $email_from = $from;
    $subject = "New Attachment Message"; 
    $email_subject = $subject;
    $email_to = $to;
    $headers = "From: ".$email_from;   
    $file = fopen($fileatt,'rb'); 
    $data = fread($file,filesize($fileatt)); 
    fclose($file);
    $semi_rand = md5(time()); 
    $mime_boundary = "Multipart_Boundary_x{$semi_rand}x"; 
    $headers .= "\nMIME-Version: 1.0\n" . 
                "Content-Type: multipart/mixed;\n" . 
                "boundary=\"{$mime_boundary}\"";
    $email_message .= "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . 
                "Content-Type:text/html; charset=\"iso-8859-1\"\n" . 
                "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 
    $data = chunk_split(base64_encode($data)); 
    $email_message .= "--{$mime_boundary}\n" . 
                "Content-Type: {$fileatt_type};\n" . 
                "name=\"{$fileatt_name}\"\n" . 
                "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n" 
                . "--{$mime_boundary}--\n";   
    $ok = mail($email_to, $email_subject, $email_message, $headers);   
    if($ok) { echo "File Sent Successfully.";} 
    else { die("Sorry but the email could not be sent. Please go back and try again!"); } 
}
4

1 回答 1

0

使用 phpMailer()

<?php 
require_once('phpmailer.php');

$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
$mail->IsSendmail(); // telling the class to use SendMail transport

try {
    $mail->AddReplyTo('email@example.com', 'First Last');
    $mail->AddAddress('John@example.com', 'John Doe');

    $mail->SetFrom('email@example.com', 'First Last');
    $mail->Subject  =  "Subject Line";
    $mail->AltBody    = "Alternate Text"; // optional, comment out and test

    $mail->WordWrap     =   50; // set word wrap    
    $mail->Body = "This is the body of the email";
    $mail->IsHTML(true); // send as HTML

    // Single or Multiple File Attachments
    $mail->AddAttachment('../path-to-file.pdf', 'File-Name.pdf');
    $mail->Send(); // Try to send email
    //echo "Message Sent OK<p></p>\n";
    } catch (phpmailerException $e) {
        echo $e->errorMessage(); //Pretty error messages from PHPMailer
    } catch (Exception $e) {
        echo $e->getMessage(); //Boring error messages from anything else!
}
// end try


?>
于 2013-01-08T20:19:36.367 回答