php

2011-12-08 2 views
5

का उपयोग करके अनुलग्नक के साथ ईमेल भेजें, मैंने इस कोड का उपयोग php का उपयोग करके अनुलग्नक के साथ ईमेल भेजने के लिए किया था, लेकिन अटैचमेंट में कुछ त्रुटि है क्योंकि मुझे एक ईमेल प्राप्त होता है और सामग्री में लगाव दिखाई देता है। इससे पहले कि मैं एक ही कोड का उपयोग करता हूं और यह सफलतापूर्वक काम करता है। क्यूं कर???php

<?php 
// sending email with attachments 

    function sendEmail($to,$from,$file,$ext){ 

     $to = "[email protected]"; 
    $from = "[email protected]"; 
     $subject = "Translation Request"; 

    $random_hash = md5(date('r', time())); 

    $headers = "From: [email protected]\r\nReply-To: [email protected]"; 

    $headers .= "\r\nContent-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; 
    } 
?> 

कृपया मदद करें।

+0

संभव डुप्लिकेट [कैसे PHP का उपयोग अनुलग्नक के साथ ईमेल भेजने के लिए?] (Http://stackoverflow.com/questions/2027069/how-to-send-email-with-attachment-using-php) – mario

+0

आपका कोड फिक्सिंग के लायक नहीं है। यह इंडेंटेशन बीटीडब्ल्यू है जो एमआईएम मार्कअप को तोड़ देता है। – mario

उत्तर

2

आप या तो this ट्यूटोरियल का वर्णन कर सकते हैं या आप PEAR मॉड्यूल का उपयोग कर सकते हैं ताकि this ट्यूटोरियल का वर्णन किया जा सके।

पीयर का उपयोग करना शायद एक बेहतर विकल्प है क्योंकि यह करना आसान है। एकमात्र चेतावनी यह है कि सभी मेजबानों पर पियर उपलब्ध नहीं है।

6

किस कारण से 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(); } 
+0

^अंत में अतिरिक्त घुंघराले –

+0

अतिरिक्त घुंघराले को हटा दिया –

0

मैं इस का उपयोग कर रहा:

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: base64\n"; 
    $this->attachments[$file] .= "Content-Disposition: attachment; " . 
            "filename=\"$fname\"\n\n"; 
    $this->attachments[$file] .= $_buf; 

    return 1; 
    } 
0

आपका कोड अभ्यस्त, काम हो क्योंकि ईमेल का समर्थन नहीं करता व्हाइटस्पेस

$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 
0

मैं इस और उपयोग कर रहा हूँ (का उपयोग कर 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   = '[email protected]_domain.com'; //from mail, it is mandatory with some hosts 
    $recipient_email = '[email protected]'; //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.0\r\n"; 
     $headers .= "From:".$from_email."\r\n"; 
     $headers .= "Reply-To: ".$reply_to_email."" . "\r\n"; 
     $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; 

     //body plain text 
     $body = "--$boundary\r\n"; 
     $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n"; 
     $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
     $body .= chunk_split(base64_encode($message)); 

     //attachment file 
     $body .= "--$boundary\r\n"; 
     $body .="Content-Type: $file_type; name=".$file_name."\r\n"; 
     $body .="Content-Disposition: attachment; filename=".$file_name."\r\n"; 
     $body .="Content-Transfer-Encoding: base64\r\n"; 
     $body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n"; 
     $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!'); 
    } 
} 
?> 
की
संबंधित मुद्दे