পিএইচপিমেইলার চরিত্রের এনকোডিংয়ের সমস্যা


189

আমি রেজিস্ট্রেশন, অ্যাক্টিভেশন প্রেরণের জন্য পিএইচপিমেইলারটি ব্যবহার করার চেষ্টা করি। ইত্যাদি ব্যবহারকারীদের মেল:

require("class.phpmailer.php");
$mail -> charSet = "UTF-8";
$mail = new PHPMailer();
$mail->IsSMTP();  
$mail->Host     = "smtp.mydomain.org";  
$mail->From     = "name@mydomain.org";
$mail->SMTPAuth = true; 
$mail->Username ="username"; 
$mail->Password="passw"; 
//$mail->FromName = $header;
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");
$mail->AddAddress($emladd);
$mail->AddAddress("mytest@gmail.com");
$mail->AddBCC('mytest2@mydomain.org', 'firstadd');
$mail->Subject  = $sub;
$mail->Body = $message;
$mail->WordWrap = 50;  
if(!$mail->Send()) {  
   echo 'Message was not sent.';  
   echo 'Mailer error: ' . $mail->ErrorInfo;  
}

$messageল্যাটিন অক্ষর রয়েছে। দুর্ভাগ্যক্রমে সমস্ত ওয়েবমেল (gmail, webmail.mydomain.org, emailaddress.domain.xx) আলাদা কোডিং ব্যবহার করছে।

সমস্ত মেইলবক্সে আমার মেলটি হুবহু দেখাতে আমি কীভাবে UTF-8 কোডিং ব্যবহার করতে বাধ্য করতে পারি?

আমি মেল শিরোনামের প্রস্থকে রূপান্তর করার চেষ্টা করেছি mb_convert_encoding(), তবে ভাগ্য ছাড়াই।


উপরের চারসেটের মূলধনটি বোভেন্ডার দ্বারা পরিবর্তন করা হয়েছিল।
গোগোভিটস

উত্তর:


473

আপনি যদি 100% নিশ্চিত হন $ বার্তায় আইএসও -8859-1 রয়েছে আপনি ডেভিডের কথা মত আপনি utf8_encode ব্যবহার করতে পারেন । অন্যথায় b বার্তায় mb_detect_encoding এবং mb_convert_encoding ব্যবহার করুন।

এটাও খেয়াল করুন

$mail -> charSet = "UTF-8"; 

দ্বারা প্রতিস্থাপন করা উচিত:

$mail->CharSet = 'UTF-8';

এবং ক্লাস ইনস্ট্যান্টেশন পরে স্থাপন (পরে new)। সম্পত্তি সংবেদনশীল! দেখুন PHPMailer ডক তালিকা & সঠিক বানান গজ।

এছাড়াও পিএইচপি মেলারের ডিফল্ট এনকোডিং 8bitযা ইউটিএফ -8 ডেটা নিয়ে সমস্যাযুক্ত হতে পারে। এটি ঠিক করতে আপনি এটি করতে পারেন:

$mail->Encoding = 'base64';

নোট করুন যে 'quoted-printable'সম্ভবত এই ক্ষেত্রে (এবং এমনকি এমনকি 'binary') খুব কার্যকর হবে। আরও তথ্যের জন্য আপনি আরএফসি 1341 পড়তে পারেন - সামগ্রী-স্থানান্তর-এনকোডিং শিরোনাম ক্ষেত্র


35
আমি জানি না যে কেউ এই পাগল হওয়ার মতো যত্ন করে কিনা তবে আমার এটি কাজ করার জন্য আমাকে $ মেইল-> এনকোডিং = "বেস 64৪" যুক্ত করতে হয়েছিল
অ্যান্ড্রু রেভাক

5
@ অ্যান্ড্রুআরভাক আপনি দিনটি বাঁচিয়েছেন! :)
কারলা

3
পছন্দ করুন এটিই এটি সমাধান করেছে।
বার্নার্ডা

Mb_detect_encoding এবং mb_convert_encoding এর ব্যবহারটি দুর্দান্ত হত।
ব্লু

26
$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();

লাইন $mail -> CharSet = "UTF-8";অবশ্যই পরে $mail = new PHPMailer();এবং কোনও ফাঁকা স্থান ছাড়া হবে!

এটা চেষ্টা কর

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";

5
আমি আরও ভাল পড়ার জন্য এই পোস্টটি আপডেট করেছি, তবে অপের প্রশ্নটির উত্তর ইতিমধ্যে 2 বছর আগে দেওয়া হয়েছিল! এবং এটি গৃহীত উত্তরগুলি ইতিমধ্যে এটি অন্তর্ভুক্ত করেছে।
দ্বুজা

5

পার্টিতে দেরি হওয়ার জন্য দুঃখিত আপনার সার্ভার কনফিগারেশনের উপর নির্ভর করে আপনাকে ছোট হাতের অক্ষর utf-8 এর সাথে কঠোরভাবে অক্ষর নির্দিষ্ট করতে হবে , অন্যথায় এটি উপেক্ষা করা হবে। আপনি যদি সমাধানগুলি অনুসন্ধান করতে এখানে এসে শেষ করেন এবং উপরের উত্তরের কোনওটিই সহায়তা করে না:

$mail->CharSet = "UTF-8";

এর সাথে প্রতিস্থাপন করা উচিত:

$mail->CharSet = "utf-8";

5

আমি নিজেকে এইভাবে কাজ করি

  $mail->FromName = utf8_decode($_POST['name']);

http://php.net/manual/en/function.utf8-decode.php


আমার নিজের কোনও পোস্টের জিনিস নেই, কেবল একটি নিয়মিত ফরাসি স্ট্রিংয়ে একটি utf-8 এনকোডড ফাইলে লেখা আছে, এবং এটি একটি কবজির মতো কাজ করেছে, ধন্যবাদ!
toni07


3

আমি পেয়েছিলাম & oacute; $ মেইল-> সাবজেক্ট / ডাব্লু পিএইচপিমেইলার

সুতরাং আমার জন্য সম্পূর্ণ সমাধানটি হ'ল:

// Your Subject with tildes. Example.
$someSubjectWithTildes = 'Subscripción España';

$mailer->CharSet = 'UTF-8';
$mailer->Encoding = 'quoted-printable';
$mailer->Subject = html_entity_decode($someSubjectWithTildes);

আশা করি এটা সাহায্য করবে.


1

যখন উপরের কোনওটি না কাজ করে এবং এখনও মেলগুলি দেখতে দেখতে লাগে ª הודפסה ×•× ×©×œ:

$mail->addCustomHeader('Content-Type', 'text/plain;charset=utf-8');
$mail->Subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';;

0

@ $mail -> charSet = "UTF-8";

--- এই লাইনটি এর অধীনে হওয়া উচিত

$mail = new PHPMailer(); line.

pff ..


হ্যাঁ এটা সঠিক. আপনাকে অবজেক্ট ইনস্ট্যান্টেশন করার পরে এটি স্থাপন করতে হবে।


এটি প্রশ্নের উত্তর সরবরাহ করে না। কোনও লেখকের কাছ থেকে সমালোচনা বা স্পষ্টতার জন্য অনুরোধ জানাতে, তাদের পোস্টের নীচে একটি মন্তব্য দিন - আপনি সর্বদা আপনার নিজের পোস্টে মন্তব্য করতে পারেন, এবং আপনার যথেষ্ট সুনামের পরে আপনি কোনও পোস্টে মন্তব্য করতে সক্ষম হবেন ।
piet.t

এটি এই সমস্যাটির জন্য কোনও সমালোচনা বা স্পষ্টকরণের অনুরোধ নয়। সঠিক উত্তরটি হল: $ মেল = নতুন পিএইচপিএমেলার (); $ মেইল-> চারসেট = 'ইউটিএফ -8';
নিকোস কাপেটেনাকোস

এটি আমাকে কোনও উত্তর দেয় না বলে হোলিয়ান এর উত্তরের মতামত বলে মনে হচ্ছে জো আমাকে me
piet.t

আপনি যদি চারসেট সম্পত্তি ব্যবহার করেন তবে কাজ করবে না। সঠিকটি হ'ল চারসেট। কেসটি আলাদা করে দেয়।
নিকোস কাপেতানাকোস

ঠিক আছে, তাহলে আপনি কেন সঠিক উত্তর দেওয়ার পরিবর্তে ভুল উত্তরটি উদ্ধৃত করবেন? তবে এটি ইতিমধ্যে খুব আছে, তাই আপনার কী যুক্ত করতে হবে?
piet.t

0

সবচেয়ে সহজ উপায় এবং আপনাকে সাহায্য করবে চারসেটটি ইউটিএফ -8 এ সেট করে

$mail->CharSet = "UTF-8"

@ নিকজুবার ঠিক আছে লাইনটি সম্পাদনার কারণে। এটি আসল প্রশ্নে ঠিক
তেমনটি

0

পিএইচপিমেইলার ক্লাসটি ব্যবহার করে ইমেল প্রেরণে চরিত্রের এনকোডিংয়ের সমস্যা এড়াতে আমরা এটি "চারসেট" প্যারামিটার ব্যবহার করে ইউটিএফ -8 অক্ষর এনকোডিং সহ প্রেরণ করার জন্য এটি কনফিগার করতে পারি, যেমন আমরা নিম্নলিখিত পিএইচপি কোডে দেখতে পারি:

$mail = new PHPMailer();
$mail->From = 'midireccion@email.com';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('emaildestino@email.com');
$mail->Subject = 'Prueba';
$mail->Body = '';
$mail->IsHTML(true);


// Active condition utf-8
$mail->CharSet = 'UTF-8';


// Send mail
$mail->Send();

-5

$ মেল -> চারসেট = "ইউটিএফ -8"; --- এই লাইনটি $ মেল = নতুন পিএইচপিএমেলার () এর অধীনে হওয়া উচিত; লাইন।

pff ..

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