发送电子邮件与附件使用php



我使用此代码使用php发送带有附件的电子邮件,但由于我收到电子邮件并且附件出现在内容中,因此附件中出现了错误。在我使用相同的代码之前,它成功地工作了。为什么? ?

<?php
// sending email with attachments
    function sendEmail($to,$from,$file,$ext){
      $to = "admin@fuwant.com";
     $from = "noor@fuwant.com";
      $subject = "Translation Request";
  $random_hash = md5(date('r', time()));
  $headers = "From: sahar@fuwant.comrnReply-To: admin@fuwant.com";
  $headers .= "rnContent-Type: multipart/mixed; boundary="PHP-mixed-".$random_hash.""";
  $attachment = chunk_split(base64_encode(file_get_contents("Test.doc")));
  $output = "
        --PHP-mixed-$random_hash;
        Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash'
        --PHP-alt-$random_hash
        Content-Type: text/plain; charset='iso-8859-1'
        Content-Transfer-Encoding: 7bit
        Hello World!
        This is the simple text version of the email message.
        --PHP-alt-$random_hash
        Content-Type: text/html; charset='iso-8859-1'
        Content-Transfer-Encoding: 7bit
        <h2>Hello World!</h2>
        <p>This is the <b>HTML</b> version of the email message.</p>
        --PHP-alt-$random_hash--
        --PHP-mixed-$random_hash
        Content-Type: application/doc; name=Test.doc
        Content-Transfer-Encoding: base64
        Content-Disposition: attachment
        $attachment
        --PHP-mixed-$random_hash--";
      $send =  @mail($to, $subject, $output, $headers);
  return $send;
  }
?>

请帮。

为什么不使用phpmailer?附件示例:

function mandaMail ($nombredest, $maildest, $asunto, $cuerpo) {
require_once("mailer/class.phpmailer.php");
$mail = new PHPMailer(true);
$mail->IsSMTP();
try {
    $mail->Host = "xxxx"; $mail->Port = 25; // smtp server
    $mail->SMTPAuth = true;
    $mail->Username = "xxxx"; // smtp username
    $mail->Password = "xxxx"; // smtp pass
    $mail->AddReplyTo("xxxx", "xxxx"); // email & name
    $mail->SetFrom("xxxx", "xxxx"); // similar to up value
    $mail->AddAddress($maildest, $nombredest);
    $mail->Subject = $asunto;
    $mail->MsgHTML(file_get_contents($cuerpo));
    $mail->AddAttachment("xxxx", "xxxx"); // attachments directory, attachment name (ie: dir/blah.jpg, blah.jpg)
    $mail->Send();
} catch (phpmailerException $e) { echo $e->errorMessage();
} catch (Exception $e) { echo $e->getMessage(); }

您可以按照本教程描述的方式完成,也可以使用PEAR模块之一发送带有本教程描述的附件的电子邮件。

使用PEAR可能是更好的选择,因为它更容易操作。唯一需要注意的是,PEAR并非在所有主机上都可用。

我用这个:

function attachfile($file, $type = "application/octetstream")  {
    if(!($fd = fopen($file, "r"))) {
      $this->errstr = "Error opening $file for reading.";
      return 0;
    }
    $_buf = fread($fd, filesize($file));
    fclose($fd);
    $fname = $file;
    for($x = strlen($file); $x > 0; $x--)
      if($file[$x] == "/")
        $fname = substr($file, $x, strlen($file) - $x);
    // Convert to base64 becuase mail attachments are not binary safe.
    $_buf = chunk_split(base64_encode($_buf));
    $this->attachments[$file] = "n--" . $this->boundary . "n";
    $this->attachments[$file] .= "Content-Type: $type; name="$fname"n";
    $this->attachments[$file] .= "Content-Transfer-Encoding: base64n";
    $this->attachments[$file] .= "Content-Disposition: attachment; " .
                                     "filename="$fname"nn";
    $this->attachments[$file] .= $_buf;
    return 1;
  }

你的代码不会工作,因为电子邮件不支持空白

  $output = "
       --PHP-mixed-$random_hash;
       Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash'
       --PHP-alt-$random_hash
       Content-Type: text/plain; charset='iso-8859-1'
       Content-Transfer-Encoding: 7bit

必须使用无空白

 $output = "
 --PHP-mixed-$random_hash;
 Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash'
 --PHP-alt-$random_hash
 Content-Type: text/plain; charset='iso-8859-1'
 Content-Transfer-Encoding: 7bit

我正在使用这个和(不使用PHPMailer),希望这对你有帮助。

<form enctype="multipart/form-data" method="POST" action="">
    <label>Your Name <input type="text" name="sender_name" /> </label> <br>
    <label>Your Email <input type="email" name="sender_email" /> </label> <br>
    <label>Subject <input type="text" name="subject" /> </label> <br>
    <label>Message <textarea name="message"></textarea> </label> <br>
    <label>Attachment <input type="file" name="my_file" /></label><br>
    <label><input type="submit" name="button" value="Submit" /></label>
</form>
<?php 
echo "<pre>";print_r($_REQUEST);echo "</pre>"; //comment this line
echo "<pre>";print_r($_FILES);echo "</pre>"; //comment this line
if($_POST && isset($_FILES['my_file']))
{
    $from_email         = 'noreply@your_domain.com'; //from mail, it is mandatory with some hosts
    $recipient_email    = 'your-emailid@gmail.com'; //recipient email (most cases it is your personal email)
    //Capture POST data from HTML form and Sanitize them, 
    $sender_name    = filter_var($_POST["sender_name"], FILTER_SANITIZE_STRING); //sender name
    $reply_to_email = filter_var($_POST["sender_email"], FILTER_SANITIZE_STRING); //sender email used in "reply-to" header
    $subject        = filter_var($_POST["subject"], FILTER_SANITIZE_STRING); //get subject from HTML form
    //$message        = filter_var($_POST["message"], FILTER_SANITIZE_STRING); //message
    $message        = "Name : ".$sender_name."nMessage : ".$_POST["message"]; //message
    //Get uploaded file data
    $file_tmp_name    = $_FILES['my_file']['tmp_name'];
    $file_name        = $_FILES['my_file']['name'];
    $file_size        = $_FILES['my_file']['size'];
    $file_type        = $_FILES['my_file']['type'];
    $file_error       = $_FILES['my_file']['error'];
    if($file_error > 0)
    {
        die('Upload error or No files uploaded');
    }
    //read from the uploaded file & base64_encode content for the mail
    $handle = fopen($file_tmp_name, "r");
    $content = fread($handle, $file_size);
    fclose($handle);
    $encoded_content = chunk_split(base64_encode($content));
        $boundary = md5("sanwebe");
        //headers
        $headers = "MIME-Version: 1.0rn"; 
        $headers .= "From:".$from_email."rn"; 
        $headers .= "Reply-To: ".$reply_to_email."" . "rn";
        $headers .= "Content-Type: multipart/mixed; boundary = $boundaryrnrn"; 
        //body plain text 
        $body = "--$boundaryrn";
        $body .= "Content-Type: text/plain; charset=ISO-8859-1rn";
        $body .= "Content-Transfer-Encoding: base64rnrn"; 
        $body .= chunk_split(base64_encode($message)); 
        //attachment file
        $body .= "--$boundaryrn";
        $body .="Content-Type: $file_type; name=".$file_name."rn";
        $body .="Content-Disposition: attachment; filename=".$file_name."rn";
        $body .="Content-Transfer-Encoding: base64rn";
        $body .="X-Attachment-Id: ".rand(1000,99999)."rnrn"; 
        $body .= $encoded_content; 
    $sentMail = @mail($recipient_email, $subject, $body, $headers);
    if($sentMail) //output success or failure messages
    {       
        die('Thank you for your email');
    }else{
        die('Could not send mail!');  
    }
}
?>

这样做效果也很好:

$to = 'bla@test.de'; 
 $from = 'blub@test.de'; 
$fromName = 'Me'; 

$subject = 'Hello';  

$file = "D:/xxxxxxx/kanal_uebersicht.pdf"; 

$htmlContent= "Sehr geehrte Damen und Herren, rn";
 $htmlContent.= "blabla. rn";
$htmlContent.= "Mit freundlichen Grüßen, rn";
$htmlContent.= "blabla. rn";

$headers = "From: $fromName"." <".$from.">"; 

$semi_rand = md5(time());  
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";  
$headers .= "nMIME-Version: 1.0n" . "Content-Type: multipart/mixed;n" . " boundary="{$mime_boundary}""; 

$message .= "--{$mime_boundary}n" . "Content-Type: text/plain; charset="UTF-8"n" . 
"Content-Transfer-Encoding: 7bitnn" . $htmlContent . "nn";  

if(!empty($file) > 0){ 
    if(is_file($file)){ 
        $message .= "--{$mime_boundary}n"; 
        $fp =    @fopen($file,"rb"); 
        $data =  @fread($fp,filesize($file)); 
        @fclose($fp); 
        $data = chunk_split(base64_encode($data)); 
        $message .= "Content-Type: application/octet-stream; name="".basename($file).""n" .  
        "Content-Description: ".basename($file)."n" . 
        "Content-Disposition: attachment;n" . " filename="".basename($file).""; size=".filesize($file).";n" .  
        "Content-Transfer-Encoding: base64nn" . $data . "nn"; 
    } 
} 
$message .= "--{$mime_boundary}--"; 
$returnpath = "-f" . $from; 

$mail = @mail($to, $subject, $message, $headers, $returnpath); 

相关内容

  • 没有找到相关文章

最新更新