পিএইচপি মেল () দিয়ে সংযুক্তি প্রেরণ করবেন?


224

আমাকে মেইল ​​সহ পিডিএফ প্রেরণ করা দরকার, এটা কি সম্ভব?

$to = "xxx";
$subject = "Subject" ;
$message = 'Example message with <b>html</b>';
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: xxx <xxx>' . "\r\n";
mail($to,$subject,$message,$headers);

আমি কী মিস করছি?

php 

16
mail()ফাংশন সহ একটি সংযুক্তি প্রেরণ করা আপনার প্রত্যাশার চেয়েও শক্ত, আপনার সময়ের প্রয়োজনে, পিএইচপিমেইলার
মিহাই ইওগার

1
অথবা আপনি কি কেবল এটির সাথে লিঙ্ক করতে পারেন?

@ মিমহাই লোরগা এর জন্য কি সার্ভার সাইড ইনস্টল করার দরকার নেই? কোনও এক্সটেনশন বা প্লাগইন ছাড়াই যদি এটি সম্ভব হয় তবে কীভাবে তা আমার জানা দরকার।

দ্রুত গুগল অনুসন্ধান - webcheatsheet.com/php/send_email_text_html_attachment.php
চিহ্নিত করুন

2
@ ক্রিশ্চিয়ানিকানকেনেন এটি কেবল একটি ভাল স্ক্রিপ্ট, এটির অনেকগুলি বৈশিষ্ট্যও রয়েছে যা সম্পাদন করা শক্ত hard চাকা পুনরুদ্ধার কেন? এটি কোনও অতিরিক্ত প্লাগইন ব্যবহার করে না।
মিহাই ইওগার

উত্তর:


309

আমি মন্তব্যে @ মিহাইআইর্গা সহ একমত - পিএইচপিএমেলার স্ক্রিপ্টটি ব্যবহার করুন। আপনি এটিকে প্রত্যাখ্যান করছেন বলে মনে হচ্ছে কারণ আপনি সহজ বিকল্পটি চান। আমার বিশ্বাস, PHPMailer হয় একটি খুব বড় মার্জিন দ্বারা সহজ বিকল্প নিজের পিএইচপি এর বিল্ট-ইন সঙ্গে করার চেষ্টা তুলনায় mail()ফাংশন। পিএইচপি এর mail()ফাংশন সত্যিই খুব ভাল না।

পিএইচপিমেইলার ব্যবহার করতে:

  • এখান থেকে পিএইচপিএমেলার স্ক্রিপ্টটি ডাউনলোড করুন: http://github.com/PHPMailer/PHPMailer
  • সংরক্ষণাগারটি বের করুন এবং স্ক্রিপ্টের ফোল্ডারটি আপনার প্রকল্পের কোনও সুবিধাজনক স্থানে অনুলিপি করুন।
  • মূল স্ক্রিপ্ট ফাইল অন্তর্ভুক্ত করুন - require_once('path/to/file/class.phpmailer.php');

এখন, সংযুক্তি সহ ইমেলগুলি প্রেরণ করা অত্যন্ত অবিশ্বাস্যরকম সহজ থেকে অত্যন্ত কঠিন থেকে শুরু করে:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$email = new PHPMailer();
$email->SetFrom('you@example.com', 'Your Name'); //Name is optional
$email->Subject   = 'Message Subject';
$email->Body      = $bodytext;
$email->AddAddress( 'destinationaddress@example.com' );

$file_to_attach = 'PATH_OF_YOUR_FILE_HERE';

$email->AddAttachment( $file_to_attach , 'NameOfFile.pdf' );

return $email->Send();

এটি কেবলমাত্র সেই এক লাইন $email->AddAttachment();- আপনি আরও সহজ জিজ্ঞাসা করতে পারেন নি।

আপনি যদি পিএইচপি এর mail()ফাংশন দিয়ে এটি করেন , আপনি কোড স্ট্যাক লিখবেন, এবং আপনার সম্ভবত বাগগুলি খুঁজে পাওয়া খুব কঠিন হবে।


1
হ্যাঁ, এটা সহজ। PhpMailer এর পুরো বিষয়টি হ'ল এটি জটিল জিনিসগুলি করে যাতে আপনার প্রয়োজন হয় না। এ কারণেই এটি পড়া জটিল। এমনকি কেবল পাঠ্য-কেবল ইমেল প্রেরণের জন্যও আমি পিএইচপিমেইলারকে পছন্দ করি mail()তবে সংযুক্তিগুলির সাথে কাজ করার জন্য এটি নিখুঁত কোনও ব্রেইনার নয়।
এসডিসি

4
আমি একই ছিলাম - মেলটি ব্যবহার করতে চেয়েছিলাম (কারণ) আমার কোডটিতে ইতিমধ্যে এটি ছিল। সংযুক্তিগুলি পাঠাতে PHPMAILER আমাকে 5 মিনিটেরও কম সময় নিয়েছে!
জেমস উইলসন

108
mail()সংযুক্তি যুক্ত করতে ফাংশনটি কীভাবে ব্যবহার করতে হয় তার উত্তর খুঁজতে আমি এই প্রশ্নটি পেয়েছি । এই উত্তরটি আমাকে তা করতে সহায়তা করে না।
সাইফার

19
এটি প্রশ্নের উত্তর নয়। কীভাবে পিএইচপি মেলারের সাথে একটি সংযুক্তি প্রেরণ করা যায় তা কীভাবে পিএইচপি-র মেইলের সাথে সংযুক্তি প্রেরণ করা যায় না () যা জিজ্ঞাসা করা হয়।
টবি

4
এই উত্তরটি প্রকল্প দ্বারা ব্যবহৃত লাইসেন্সকেও উপেক্ষা করে। পিএইচপিএমেলার ব্যবহার করে, আপনাকে অবশ্যই নিশ্চিত হতে হবে যে আপনি প্যাকেজটিকে তার উত্স থেকে এলজিপিএল লাইসেন্স নিয়ে সমস্যাগুলি প্রতিরোধ করার জন্য বাদ দিয়েছেন।
এক্সেল

190

আপনি নিম্নলিখিত কোড ব্যবহার করে চেষ্টা করতে পারেন:

    $filename = 'myfile';
    $path = 'your path goes here';
    $file = $path . "/" . $filename;

    $mailto = 'mail@mail.com';
    $subject = 'Subject';
    $message = 'My message';

    $content = file_get_contents($file);
    $content = chunk_split(base64_encode($content));

    // a random hash will be necessary to send mixed content
    $separator = md5(time());

    // carriage return type (RFC)
    $eol = "\r\n";

    // main header (multipart mandatory)
    $headers = "From: name <test@test.com>" . $eol;
    $headers .= "MIME-Version: 1.0" . $eol;
    $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;
    $headers .= "Content-Transfer-Encoding: 7bit" . $eol;
    $headers .= "This is a MIME encoded message." . $eol;

    // message
    $body = "--" . $separator . $eol;
    $body .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol;
    $body .= "Content-Transfer-Encoding: 8bit" . $eol;
    $body .= $message . $eol;

    // attachment
    $body .= "--" . $separator . $eol;
    $body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . $eol;
    $body .= "Content-Transfer-Encoding: base64" . $eol;
    $body .= "Content-Disposition: attachment" . $eol;
    $body .= $content . $eol;
    $body .= "--" . $separator . "--";

    //SEND Mail
    if (mail($mailto, $subject, $body, $headers)) {
        echo "mail send ... OK"; // or use booleans here
    } else {
        echo "mail send ... ERROR!";
        print_r( error_get_last() );
    }

14-জুন-2018 সম্পাদনা করুন

ইমেল সরবরাহকারীর কিছু ব্যবহারের জন্য আরও পঠনযোগ্যতার জন্য

$body .= $eol . $message . $eol . $eol; এবং $body .= $eol . $content . $eol . $eol;


id uid অব্যবহৃত বলে মনে হচ্ছে।
এড

কেউ একটি উত্তরে উল্লেখ করেছেন যে এটি একটি মন্তব্য হওয়া উচিত যেহেতু ওপির কোডটি বলে 'Example message with <b>html</b>', তখন সামগ্রী-প্রকারের text/htmlপরিবর্তে হওয়া উচিত text/plain। আমি তার পক্ষে মন্তব্য পোস্ট করছি কারণ তার কাছে মন্তব্য পোস্ট করার মতো যথেষ্ট প্রতিনিধি নেই এবং আমি মুছে ফেলার জন্য উত্তরটি পতাকাঙ্কিত করেছি।
আদি ইনবার

এই কোডটিতে, আপনাকে কি $ পথ এবং $ ফাইলের নাম সংজ্ঞায়িত করতে হবে? এবং এটি $ ফাইলের নাম = $ _ ফাইলগুলি ['ইউজারফাইলে'] ['tmp_name'] এর মতো কিছু হবে; ?
দুষ্টু

আপনি কেন $fileএটি উল্লেখ করার পরে ঘোষণা করবেন $filename?
কলব ক্যানিয়ন

2
পিএইচপিমেলারের ডক্স থেকে ... "ইমেলটি সঠিকভাবে ফর্ম্যাট করা আশ্চর্যজনকভাবে শক্ত There ঠিক খালি ভুল! " ...এটা সত্যি! সংযুক্তি সহ মেল প্রেরণের জন্য আমি এই উত্তরের মতো কিছু ব্যবহার করেছি এবং এটি কার্যকর! কেবল কয়েক দিন পরে এটি খুঁজে পাওয়ার জন্য যে Gmail যখন সংযুক্তিগুলিকে ঠিকঠাক দেখায়, অন্য সরবরাহকারীরা মেইলে বেস 64 এর সরাসরি লিঙ্কটি দেখায়।
অ্যারোন কিকালি

134

পিএইচপি 5.5.27 সুরক্ষা আপডেটের জন্য

$file = $path.$filename;
$content = file_get_contents( $file);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);

// header
$header = "From: ".$from_name." <".$from_mail.">\r\n";
$header .= "Reply-To: ".$replyto."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";

// message & attachment
$nmessage = "--".$uid."\r\n";
$nmessage .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$nmessage .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$nmessage .= $message."\r\n\r\n";
$nmessage .= "--".$uid."\r\n";
$nmessage .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
$nmessage .= "Content-Transfer-Encoding: base64\r\n";
$nmessage .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$nmessage .= $content."\r\n\r\n";
$nmessage .= "--".$uid."--";

if (mail($mailto, $subject, $nmessage, $header)) {
    return true; // Or do something here
} else {
  return false;
}

আপনি ফাইলের নাম সংজ্ঞায়িত করেন নি। কী হওয়ার কথা? ফাইলপথ?
জন

3
@Jon। $ ফাইলের নাম, আপনার ফাইলের আসল নাম এবং $ পাথ ফাইলের নাম ব্যতীত আসল ফাইল পাথ। আমি ভেরিয়েবলগুলি ঘোষণার জন্য তাদের যথেষ্ট বর্ণনামূলক বলে মনে করেছি এবং সেগুলি প্রতিষ্ঠিত করেছি
সাইমন মোখেল

যদি আপনি তাদের ফাংশন মেইল_টাচমেন্ট ($ ফাইলের নাম, $ পথ, $ মেইলটো, $ মেইল_মেল, $ থেকে_নাম, $ জবাব, $ বিষয়, $ বার্তা) সংজ্ঞায়িত করতে না চান তবে এটি কোনও ফাংশনে থাকতে হবে
জন

3
যারা একাধিক সংযুক্তি প্রেরণ করছেন তাদের জন্য দ্রষ্টব্য - পৃথক MIME অংশগুলি $nmessage .= "--".$uid."\r\n";এবং চূড়ান্ত MIME অংশের পরে, ব্যবহার করুন $nmessage .= "--".$uid."--";(উপরে প্রদর্শিত হিসাবে)।
রিনোগো

2
অবশেষে বোকা phpmailer জিনিসটি কাজ করার চেষ্টা করার মাথা ব্যাথার পরে এটি কাজ করে।
E.Arruood

22

সুইফটমিলার হ'ল সহজে ব্যবহারযোগ্য স্ক্রিপ্ট যা স্বয়ংক্রিয়ভাবে ইমেল ইঞ্জেকশন থেকে রক্ষা করে এবং সংযুক্তিগুলিকে বাতাস বানায় । আমি পিএইচপি এর অন্তর্নির্মিত mail()ফাংশনটি ব্যবহার করে দৃ strongly়ভাবে নিরুৎসাহিত করি ।

ব্যবহার করা:

  • সুইফটমিলার ডাউনলোড করুন এবং libফোল্ডারটি আপনার প্রকল্পে রাখুন
  • ব্যবহার করে মূল ফাইল অন্তর্ভুক্ত করুন require_once 'lib/swift_required.php';

আপনার মেইল ​​করার সময় এখন কোডটি যুক্ত করুন:

// Create the message
$message = Swift_Message::newInstance()
    ->setSubject('Your subject')
    ->setFrom(array('webmaster@mysite.com' => 'Web Master'))
    ->setTo(array('receiver@example.com'))
    ->setBody('Here is the message itself')
    ->attach(Swift_Attachment::fromPath('myPDF.pdf'));

//send the message          
$mailer->send($message);

আরও তথ্য এবং বিকল্পগুলি সুইফটমেলার ডক্সে পাওয়া যাবে ।


6
আপনি তৃতীয়-পক্ষের লাইব্রেরিটি ডুইনলোড করার প্রস্তাব দিচ্ছেন বলে আমার ধারণা
ভ্লাদক্রাস

পিএইচপিমেইলারটি কি তৃতীয় পক্ষ নয়? বা মানে @ ম্যাথহে জনসন তৈরি করেছেন বা সুইফটমিলার প্রস্তুতকারকদের অংশ? উভয়ই উপায় যতক্ষণ সমাধান ভাল এবং কার্যকর, একটি
ডাউনভোট অনুচিত

1
@ এক্সসমাইল, পিএইচপিএমেলার অবশ্যই তৃতীয় পক্ষের :) আমি ডাউনভোটদের সাথে একমত নই, যেমন (অন্ততপক্ষে) সমাধানটি কাজ করে। যাইহোক, লোকেরা তাদের ইচ্ছামতো ভোট দিতে পারে, এবং উত্সাহগুলি অস্বীকার করার চেয়ে বেশি সমর্থন করে।
ম্যাথু জনসন

17

সংযুক্তি সহ ইমেল প্রেরণের জন্য আমাদের মাল্টিপার্ট / মিক্সড এমআইএমআই টাইপ ব্যবহার করা উচিত যা নির্দিষ্ট করে যে মিশ্রিত প্রকারগুলি ইমেলের অন্তর্ভুক্ত থাকবে। তদুপরি, আমরা ইমেলটির প্লেইন-পাঠ্য এবং এইচটিএমএল সংস্করণ উভয়ই প্রেরণে মাল্টিপার্ট / বিকল্প এমএমআই টাইপ ব্যবহার করতে চাই the উদাহরণটি দেখুন:

<?php 
//define the receiver of the email 
$to = 'youraddress@example.com'; 
//define the subject of the email 
$subject = 'Test email with attachment'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks
$attachment = chunk_split(base64_encode(file_get_contents('attachment.zip'))); 
//define the body of the message. 
ob_start(); //Turn on output buffering 
?> 
--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>" 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2> 
<p>This is something with <b>HTML</b> formatting.</p> 

--PHP-alt-<?php echo $random_hash; ?>-- 

--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: application/zip; name="attachment.zip"  
Content-Transfer-Encoding: base64  
Content-Disposition: attachment  

<?php echo $attachment; ?> 
--PHP-mixed-<?php echo $random_hash; ?>-- 

<?php 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 
//send the email 
$mail_sent = @mail( $to, $subject, $message, $headers ); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 
?>

আপনি দেখতে পাচ্ছেন, সংযুক্তি সহ একটি ইমেল প্রেরণ করা সহজ। পূর্ববর্তী উদাহরণে আমাদের কাছে মাল্টিপার্ট / মিশ্রিত এমআইএমআই টাইপ রয়েছে এবং এর ভিতরে আমাদের মাল্টিপার্ট / বিকল্প এমআইএমআই টাইপ রয়েছে যা ইমেলের দুটি সংস্করণ নির্দিষ্ট করে। আমাদের বার্তার সাথে একটি সংযুক্তি অন্তর্ভুক্ত করার জন্য, আমরা নির্দিষ্ট ফাইল থেকে ডেটাটি স্ট্রিংয়ে পড়ি, বেস 64 এর সাথে এনকোড করি, এটি মাইএম স্পেসিফিকেশনের সাথে মেলে কিনা তা নিশ্চিত করার জন্য এটি ছোট অংশে বিভক্ত করুন এবং তারপরে এটি সংযুক্তি হিসাবে অন্তর্ভুক্ত করবেন।

এখান থেকে নেওয়া হয়েছে


15
কপি / লিঙ্কটি আমি ওপি মন্তব্য যোগ সামগ্রীতে পেস্ট
মার্ক

ভাল স্নিপেট, যদিও এটিকে কাজ করতে আমাকে বাউন্ডারি স্ট্রিংয়ের পরে একটি অতিরিক্ত নতুন লাইন সরবরাহ করতে হয়েছিল। আমি অনুমান করছি পিএইচপি ফাইলের লাইন শেষের সাথে এর কিছু আছে। আমার সম্পাদক এলএফ-এর ডিফল্ট, তবে আমি মনে করি যে মানটি একটি ক্যারেজ ফেরার প্রত্যাশা করে (সিআরএলএফ)।
ওজিয়ার শেহেলভিস

9

এটি আমার পক্ষে কাজ করে। এটি একাধিক সংযুক্তিও সংযুক্ত করে। সহজে

<?php

if ($_POST && isset($_FILES['file'])) {
    $recipient_email = "recipient@yourmail.com"; //recepient
    $from_email = "info@your_domain.com"; //from email using site domain.
    $subject = "Attachment email from your website!"; //email subject line

    $sender_name = filter_var($_POST["s_name"], FILTER_SANITIZE_STRING); //capture sender name
    $sender_email = filter_var($_POST["s_email"], FILTER_SANITIZE_STRING); //capture sender email
    $sender_message = filter_var($_POST["s_message"], FILTER_SANITIZE_STRING); //capture message
    $attachments = $_FILES['file'];

    //php validation
    if (strlen($sender_name) < 4) {
        die('Name is too short or empty');
    }
    if (!filter_var($sender_email, FILTER_VALIDATE_EMAIL)) {
        die('Invalid email');
    }
    if (strlen($sender_message) < 4) {
        die('Too short message! Please enter something');
    }

    $file_count = count($attachments['name']); //count total files attached
    $boundary = md5("specialToken$4332"); // boundary token to be used

    if ($file_count > 0) { //if attachment exists
        //header
        $headers = "MIME-Version: 1.0\r\n";
        $headers .= "From:" . $from_email . "\r\n";
        $headers .= "Reply-To: " . $sender_email . "" . "\r\n";
        $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n";

        //message 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($sender_message));

        //attachments
        for ($x = 0; $x < $file_count; $x++) {
            if (!empty($attachments['name'][$x])) {

                if ($attachments['error'][$x] > 0) { //exit script and output error if we encounter any
                    $mymsg = array(
                        1 => "The uploaded file exceeds the upload_max_filesize directive in php.ini",
                        2 => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
                        3 => "The uploaded file was only partially uploaded",
                        4 => "No file was uploaded",
                        6 => "Missing a temporary folder");
                    die($mymsg[$attachments['error'][$x]]);
                }

                //get file info
                $file_name = $attachments['name'][$x];
                $file_size = $attachments['size'][$x];
                $file_type = $attachments['type'][$x];

                //read file 
                $handle = fopen($attachments['tmp_name'][$x], "r");
                $content = fread($handle, $file_size);
                fclose($handle);
                $encoded_content = chunk_split(base64_encode($content)); //split into smaller chunks (RFC 2045)

                $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;
            }
        }
    } else { //send plain email otherwise
        $headers = "From:" . $from_email . "\r\n" .
                "Reply-To: " . $sender_email . "\n" .
                "X-Mailer: PHP/" . phpversion();
        $body = $sender_message;
    }

    $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! Please check your PHP mail configuration.');
    }
}
?>

এই কোডটি বৈধতা এবং ব্যবহারকারীর ইনপুট যথাযথ প্রাসঙ্গিকভাবে অস্তিত্বের অভাবের কারণে শিরোনামের ইনজেকশন আক্রমণগুলিতে ঝুঁকিপূর্ণ।
সিঙ্ক্রো

@ সানক্রো .. এটি একমাত্র কোড যা আমি একাধিক সংযুক্তিগুলির জন্য পাই যা আমার জন্য কাজ করেছিল .. আপনি কীভাবে এটি নিরাপদ উপায়ে ব্যবহার করবেন সে সম্পর্কে পরামর্শ দিতে পারেন?
এনমাথুর

7

খারাপভাবে ফর্ম্যাটেড সংযুক্তিগুলির সাথে কিছুক্ষণ লড়াই করার পরে, আমি এই কোডটি ব্যবহার করেছি:

$email = new PHPMailer();
$email->From      = 'from@somedomain.com';
$email->FromName  = 'FromName';
$email->Subject   = 'Subject';
$email->Body      = 'Body';
$email->AddAddress( 'to@somedomain.com' );
$email->AddAttachment( "/path/to/filename.ext" , "filename.ext", 'base64', 'application/octet-stream' );
$email->Send();

6

কার্যকরী ধারণা:

if (isset($_POST['submit'])) {
    $mailto = $_POST["mailTo"];
    $from_mail = $_POST["fromEmail"];
    $replyto = $_POST["fromEmail"];
    $from_name = $_POST["fromName"];
    $message = $_POST["message"];
    $subject = $_POST["subject"];

    $filename = $_FILES["fileAttach"]["name"];
    $content = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"])));

    $uid = md5(uniqid(time()));
    $name = basename($file);
    $header = "From: " . $from_name . " <" . $from_mail . ">\r\n";
    $header .= "Reply-To: " . $replyto . "\r\n";

    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--" . $uid . "\r\n";

// You add html "Content-type: text/html; charset=utf-8\n" or for Text "Content-type:text/plain; charset=iso-8859-1\r\n" by I.khan
    $header .= "Content-type:text/html; charset=utf-8\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";

// User Message you can add HTML if You Selected HTML content
    $header .= "<div style='color: red'>" . $message . "</div>\r\n\r\n";

    $header .= "--" . $uid . "\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"\r\n"; // use different content types here
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"" . $filename . "\"\r\n\r\n"; // For Attachment
    $header .= $content . "\r\n\r\n";
    $header .= "--" . $uid . "--";
    if (mail($mailto, $subject, "", $header)) {
        echo "<script>alert('Success');</script>"; // or use booleans here
    } else {
        echo "<script>alert('Failed');</script>";
    }
}

6

উল্লিখিত সংযুক্তি বিন্যাস ( application/octet-stream) এর কারণে উপরের উত্তরগুলির মধ্যে আমার পক্ষে কাজ করা হয়নি । application/pdfপিডিএফ ফাইল সহ সেরা ফলাফলের জন্য ব্যবহার করুন ।

<?php

// just edit these 
$to          = "email1@domain.com, email2@domain.com"; // addresses to email pdf to
$from        = "sent_from@domain.com"; // address message is sent from
$subject     = "Your PDF email subject"; // email subject
$body        = "<p>The PDF is attached.</p>"; // email body
$pdfLocation = "./your-pdf.pdf"; // file location
$pdfName     = "pdf-file.pdf"; // pdf file name recipient will get
$filetype    = "application/pdf"; // type

// creates headers and mime boundary
$eol = PHP_EOL;
$semi_rand     = md5(time());
$mime_boundary = "==Multipart_Boundary_$semi_rand";
$headers       = "From: $from$eolMIME-Version: 1.0$eol" .
    "Content-Type: multipart/mixed;$eol boundary=\"$mime_boundary\"";

// add html message body
$message = "--$mime_boundary$eol" .
    "Content-Type: text/html; charset=\"iso-8859-1\"$eol" .
    "Content-Transfer-Encoding: 7bit$eol$eol$body$eol";

// fetches pdf
$file = fopen($pdfLocation, 'rb');
$data = fread($file, filesize($pdfLocation));
fclose($file);
$pdf = chunk_split(base64_encode($data));

// attaches pdf to email
$message .= "--$mime_boundary$eol" .
    "Content-Type: $filetype;$eol name=\"$pdfName\"$eol" .
    "Content-Disposition: attachment;$eol filename=\"$pdfName\"$eol" .
    "Content-Transfer-Encoding: base64$eol$eol$pdf$eol--$mime_boundary--";

// Sends the email
if(mail($to, $subject, $message, $headers)) {
    echo "The email was sent.";
}
else {
    echo "There was an error sending the mail.";
}

ers শিরোনাম = "থেকে: $ থেকে ol ইওলিমাইম-সংস্করণ: 1.0 $ ইওল" $ ইওলমিমে একটি অপরিজ্ঞাত পরিবর্তনশীল ত্রুটি নিক্ষেপ করে।
পশ্চাদপসরণ

হুম ... প্রতিস্থাপন "From: $from$eolMIME-Version: 1.0$eol"সঙ্গে"From: $from" . "$eolMIME-Version: 1.0$eol"
omikes

হয়তো এটি আপনাকে পিএইচপি এর কয়েকটি সংস্করণে দুটি ভেরিয়েবল যুক্ত করতে দেয় না, এটি আমি ব্যবহার করছি এমনটিতে কাজ করে। এর জন্যে দুঃখিত. আসলে এত ঘটনার আপনি সমস্ত উদাহরণ প্রতিস্থাপন করতে চান পারে আছে $eolসঙ্গে " . "$eolযে ভাবে তার সব কাজ এক ছোঁ খোলস হবে।
omikes

2
            $to = "to@gmail.com";
            $subject = "Subject Of The Mail";
            $message = "Hi there,<br/><br/>This is my message.<br><br>";

            $headers = "From: From-Name<from@gmail.com>";
// boundary
            $semi_rand = md5(time());
            $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

// headers for attachment
            $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";

// multipart boundary
            $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";

                $message .= "--{$mime_boundary}\n";
                $filepath = 'uploads/'.$_FILES['image']['name'];
                move_uploaded_file($_FILES['image']['tmp_name'], $filepath); //upload the file
                $filename = $_FILES['image']['name'];
                $file = fopen($filepath, "rb");
                $data = fread($file, filesize($filepath));
                fclose($file);
                $data = chunk_split(base64_encode($data));
                $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$filename\"\n" .
                        "Content-Disposition: attachment;\n" . " filename=\"$filename\"\n" .
                        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                $message .= "--{$mime_boundary}\n";

mail($to, $subject, $message, $headers);

2

এইচটিএমএল কোড:

<form enctype="multipart/form-data" method="POST" action=""> 
    <label>Your Name <input type="text" name="sender_name" /> </label> 
    <label>Your Email <input type="email" name="sender_email" /> </label> 
    <label>Your Contact Number <input type="tel" name="contactnumber" /> </label>
    <label>Subject <input type="text" name="subject" /> </label> 
    <label>Message <textarea name="description"></textarea> </label> 
    <label>Attachment <input type="file" name="attachment" /></label> 
    <label><input type="submit" name="button" value="Submit" /></label> 
</form> 

পিএইচপি কোড:

<?php
if($_POST['button']){
{
    //Server Variables
    $server_name = "Your Name";
    $server_mail = "your_mail@domain.com";

    //Name Attributes of HTML FORM
    $sender_email = "sender_email";
    $sender_name = "sender_name";
    $contact = "contactnumber";
    $mail_subject = "subject";
    $input_file = "attachment";
    $message = "description";

    //Fetching HTML Values
    $sender_name = $_POST[$sender_name];
    $sender_mail = $_POST[$sender_email];
    $message = $_POST[$message];
    $contact= $_POST[$contact];
    $mail_subject = $_POST[$mail_subject];

    //Checking if File is uploaded
    if(isset($_FILES[$input_file])) 
    { 
        //Main Content
        $main_subject = "Subject seen on server's mail";
        $main_body = "Hello $server_name,<br><br> 
        $sender_name ,contacted you through your website and the details are as below: <br><br> 
        Name : $sender_name <br> 
        Contact Number : $contact <br> 
        Email : $sender_mail <br> 
        Subject : $mail_subject <br> 
        Message : $message.";

        //Reply Content
        $reply_subject = "Subject seen on sender's mail";
        $reply_body = "Hello $sender_name,<br> 
        \t Thank you for filling the contact form. We will revert back to you shortly.<br><br>
        This is an auto generated mail sent from our Mail Server.<br>
        Please do not reply to this mail.<br>
        Regards<br>
        $server_name";

//#############################DO NOT CHANGE ANYTHING BELOW THIS LINE#############################
        $filename= $_FILES[$input_file]['name'];
        $file = chunk_split(base64_encode(file_get_contents($_FILES[$input_file]['tmp_name'])));
        $uid = md5(uniqid(time()));
        //Sending mail to Server
        $retval = mail($server_mail, $main_subject, "--$uid\r\nContent-type:text/html; charset=iso-8859-1\r\nContent-Transfer-Encoding: 7bit\r\n\r\n $main_body \r\n\r\n--$uid\r\nContent-Type: application/octet-stream; name=\"$filename\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment; filename=\"$filename\"\r\n\r\n$file\r\n\r\n--$uid--", "From: $sender_name <$sender_mail>\r\nReply-To: $sender_mail\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$uid\"\r\n\r\n");
        //Sending mail to Sender
        $retval = mail($sender_mail, $reply_subject, $reply_body , "From: $server_name<$server_mail>\r\nMIME-Version: 1.0\r\nContent-type: text/html\r\n");
//#############################DO NOT CHANGE ANYTHING ABOVE THIS LINE#############################

        //Output
        if ($retval == true) {
            echo "Message sent successfully...";
            echo "<script>window.location.replace('index.html');</script>";
        } else {
            echo "Error<br>";
            echo "Message could not be sent...Try again later";
            echo "<script>window.location.replace('index.html');</script>";
        }
    }else{
        echo "Error<br>";
        echo "File Not Found";
    }
}else{
    echo "Error<br>";
    echo "Unauthorised Access";
}

1

আমি আমার নিজের ইমেল প্রেরণ / এনকোডিং ফাংশন লিখে শেষ করেছি। এটি পিডিএফ সংযুক্তি প্রেরণের জন্য আমার পক্ষে ভাল কাজ করেছে। আমি অন্যান্য বৈশিষ্ট্যগুলি উত্পাদনে ব্যবহার করি নি।

দ্রষ্টব্য: অনুমানটি যথেষ্ট জোরালো থাকা সত্ত্বেও আপনাকে পৃথক শিরোনামগুলিতে \ r \ n ব্যবহার করতে হবে, আমি যখন পিএইচপি_ইওএল ব্যবহার করেছি তখনই এটি কাজ করেছিলাম। আমি এটি কেবল লিনাক্সে পরীক্ষা করেছি। YMMV

<?php
# $args must be an associative array
#     required keys: from, to, body
#          body can be a string or a [tree of] associative arrays. See examples below
#     optional keys: subject, reply_to, cc, bcc
# EXAMPLES:
#    # text-only email:
#    email2(array(
#        'from' => 'noreply@foo.com',
#        'to' => 'jason@jasonwoof.com',
#        'subject' => 'test',
#        # body will be text/plain because we're passing a string that doesn't start with '<'
#        'body' => 'Hi, testing 1 2 3',
#    ));
#
#    # html-only email
#    email2(array(
#        'from' => 'noreply@foo.com',
#        'to' => 'jason@jasonwoof.com',
#        'subject' => 'test',
#        # body will be text/html because we're passing a string that starts with '<'
#        'body' => '<h1>Hi!</h1>I like <a href="http://cheese.com">cheese</a>',
#    ));
#
#    # text-only email (explicitly, in case first character is dynamic or something)
#    email2(array(
#        'from' => 'noreply@foo.com',
#        'to' => 'jason@jasonwoof.com',
#        'subject' => 'test',
#        # body will be text/plain because we're passing a string that doesn't start with '<'
#        'body' => array(
#            'type' => 'text',
#            'body' => $message_text,
#        )
#    ));
#
#    # email with text and html alternatives (auto-detected mime types)
#    email2(array(
#        'from' => 'noreply@foo.com',
#        'to' => 'jason@jasonwoof.com',
#        'subject' => 'test',
#        'body' => array(
#            'type' => 'alternatives',
#            'body' => array(
#                "Hi!\n\nI like cheese",
#                '<h1>Hi!</h1><p>I like <a href="http://cheese.com">cheese</a></p>',
#            )
#        )
#    ));
#
#    # email with text and html alternatives (explicit types)
#    email2(array(
#        'from' => 'noreply@foo.com',
#        'to' => 'jason@jasonwoof.com',
#        'subject' => 'test',
#        'body' => array(
#            'type' => 'alternatives',
#            'body' => array(
#                array(
#                    'type' => 'text',
#                    'body' => "Hi!\n\nI like cheese",
#                ),
#                array(
#                    'type' => 'html',
#                    'body' => '<h1>Hi!</h1><p>I like cheese</p>',
#                ),
#            )
#        )
#    ));
#
#    # email with an attachment
#    email2(array(
#        'from' => 'noreply@foo.com',
#        'to' => 'jason@jasonwoof.com',
#        'subject' => 'test',
#        'body' => array(
#            'type' => 'mixed',
#            'body' => array(
#                "Hi!\n\nCheck out this (inline) image",
#                array(
#                    'type' => 'image/png',
#                    'disposition' => 'inline',
#                    'body' => $image_data, # raw file contents
#                ),
#                "Hi!\n\nAnd here's an attachment",
#                array(
#                    'type' => 'application/pdf; name="attachment.pdf"',
#                    'disposition' => 'attachment; filename="attachment.pdf"',
#                    'body' => $pdf_data, # raw file contents
#                ),
#                "Or you can use shorthand:",
#                array(
#                    'type' => 'application/pdf',
#                    'attachment' => 'attachment.pdf', # name for client (not data source)
#                    'body' => $pdf_data, # raw file contents
#                ),
#            )
#        )
#    ))
function email2($args) {
    if (!isset($args['from'])) { return 1; }
    $from = $args['from'];
    if (!isset($args['to'])) { return 2; }
    $to = $args['to'];
    $subject = isset($args['subject']) ? $args['subject'] : '';
    $reply_to = isset($args['reply_to']) ? $args['reply_to'] : '';
    $cc = isset($args['cc']) ? $args['cc'] : '';
    $bcc = isset($args['bcc']) ? $args['bcc'] : '';

    #FIXME should allow many more characters here (and do Q encoding)
    $subject = isset($args['subject']) ? $args['subject'] : '';
    $subject = preg_replace("|[^a-z0-9 _/#'.:&,-]|i", '_', $subject);

    $headers = "From: $from";
    if($reply_to) {
        $headers .= PHP_EOL . "Reply-To: $reply_to";
    }
    if($cc) {
        $headers .= PHP_EOL . "CC: $cc";
    }
    if($bcc) {
        $headers .= PHP_EOL . "BCC: $bcc";
    }

    $r = email2_helper($args['body']);
    $headers .= PHP_EOL . $r[0];
    $body = $r[1];

    if (mail($to, $subject, $body, $headers)) {
        return 0;
    } else {
        return 5;
    }
}

function email2_helper($body, $top = true) {
    if (is_string($body)) {
        if (substr($body, 0, 1) == '<') {
            return email2_helper(array('type' => 'html', 'body' => $body), $top);
        } else {
            return email2_helper(array('type' => 'text', 'body' => $body), $top);
        }
    }
    # now we can assume $body is an associative array
    # defaults:
    $type = 'application/octet-stream';
    $mime = false;
    $boundary = null;
    $disposition = null;
    $charset = false;
    # process 'type' first, because it sets defaults for others
    if (isset($body['type'])) {
        $type = $body['type'];
        if ($type === 'text') {
            $type = 'text/plain';
            $charset = true;
        } elseif ($type === 'html') {
            $type = 'text/html';
            $charset = true;
        } elseif ($type === 'alternative' || $type === 'alternatives') {
            $mime = true;
            $type = 'multipart/alternative';
        } elseif ($type === 'mixed') {
            $mime = true;
            $type = 'multipart/mixed';
        }
    }
    if (isset($body['disposition'])) {
        $disposition = $body['disposition'];
    }
    if (isset($body['attachment'])) {
        if ($disposition == null) {
            $disposition = 'attachment';
        }
        $disposition .= "; filename=\"{$body['attachment']}\"";
        $type .= "; name=\"{$body['attachment']}\"";
    }
    # make headers
    $headers = array();
    if ($top && $mime) {
        $headers[] = 'MIME-Version: 1.0';
    }
    if ($mime) {
        $boundary = md5('5sd^%Ca)~aAfF0=4mIN' . rand() . rand());
        $type .= "; boundary=$boundary";
    }
    if ($charset) {
        $type .= '; charset=' . (isset($body['charset']) ? $body['charset'] : 'UTF-8');
    }
    $headers[] = "Content-Type: $type";
    if ($disposition !== null) {
        $headers[] = "Content-Disposition: {$disposition}";
    }

    $data = '';
    # return array, first el is headers, 2nd is body (php's mail() needs them separate)
    if ($mime) {
        foreach ($body['body'] as $sub_body) {
            $data .= "--$boundary" . PHP_EOL;
            $r = email2_helper($sub_body, false);
            $data .= $r[0] . PHP_EOL . PHP_EOL; # headers
            $data .= $r[1] . PHP_EOL . PHP_EOL; # body
        }
        $data .= "--$boundary--";
    } else {
        if(preg_match('/[^\x09\x0A\x0D\x20-\x7E]/', $body['body'])) {
            $headers[] = "Content-Transfer-Encoding: base64";
            $data .= chunk_split(base64_encode($body['body']));
        } else {
            $data .= $body['body'];
        }
    }
    return array(join(PHP_EOL, $headers), $data);
}

আমি কেবল বুঝতে পেরেছি যে আমার কোডটি এমন কিছু ফাংশনকে ডেকেছে যা আমি অন্তর্ভুক্ত করে নি। তারা কেবল নিশ্চিত করেছে যে / থেকে / সিসি / ইত্যাদি মানগুলি বৈধ ছিল। আমি এগুলিকে সরিয়ে দিয়েছি এবং এখন এই কোডটি নিজে থেকেই কাজ করে।
জেসনওফ

-1

এই পৃষ্ঠা থেকে কোড অনুলিপি করা - মেইলে কাজ করে ()

তিনি আমার একটি ফাংশন মেইল_টাচমেন্ট করা শুরু করেন যা পরে বলা যেতে পারে। যা তিনি তার সংযুক্তি কোড দিয়ে পরে করেন।

<?php
function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
    $file = $path.$filename;
    $file_size = filesize($file);
    $handle = fopen($file, "r");
    $content = fread($handle, $file_size);
    fclose($handle);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";
    if (mail($mailto, $subject, "", $header)) {
        echo "mail send ... OK"; // or use booleans here
    } else {
        echo "mail send ... ERROR!";
    }
}

//start editing and inputting attachment details here
$my_file = "somefile.zip";
$my_path = "/your_path/to_the_attachment/";
$my_name = "Olaf Lederer";
$my_mail = "my@mail.com";
$my_replyto = "my_reply_to@mail.net";
$my_subject = "This is a mail with attachment.";
$my_message = "Hallo,\r\ndo you like this script? I hope it will help.\r\n\r\ngr. Olaf";
mail_attachment($my_file, $my_path, "recipient@mail.org", $my_mail, $my_name, $my_replyto, $my_subject, $my_message);
?>

তার পৃষ্ঠাতে আরও বিশদ রয়েছে এবং মন্তব্য বিভাগে কিছু সমস্যার উত্তর দিয়েছেন।


-1

100% কার্যকারী ধারণা পিএইচপি তে সংযুক্তি সহ ইমেল প্রেরণ:

if (isset($_POST['submit'])) {
  extract($_POST);
  require_once('mail/class.phpmailer.php');

  $subject = "$name Applied For - $position";
  $email_message = "<div>Thanks for Applying ....</div> ";

  $mail = new PHPMailer;
  $mail->IsSMTP(); // telling the class to use SMTP
  $mail->Host = "mail.companyname.com"; // SMTP server
  $mail->SMTPDebug = 0;
  $mail->SMTPAuth = true;
  $mail->SMTPSecure = "ssl";
  $mail->Host = "smtp.gmail.com";
  $mail->Port = 465;
  $mail->IsHTML(true);
  $mail->Username = "info@companyname.com";  // GMAIL username
  $mail->Password = "mailPassword";          // GMAIL password

  $mail->SetFrom('info@companyname.com', 'new application submitted');
  $mail->AddReplyTo("name@yourdomain.com","First Last");
  $mail->Subject = "your subject";

  $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

  $mail->MsgHTML($email_message);

  $address = 'info@companyname.com';
  $mail->AddAddress($address, "companyname");

  $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);      // attachment

  if (!$mail->Send()) {
    /* Error */
    echo 'Message not Sent! Email at info@companyname.com';
  } else {
    /* Success */
    echo 'Sent Successfully! <b> Check your Mail</b>';
  }
}

আমি এই কোডটি গুগল এসএমটিপি মেল সংযুক্তির সাথে প্রেরণের জন্য ব্যবহার করেছি ....

দ্রষ্টব্য: এখান থেকে পিএইচপিএমেলার লাইব্রেরি ডাউনলোড করুন -> https://github.com/PHPMailer/PHP মেলার

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.