যদিও এই উত্তরের কিছু অংশ রয়েছে যা কেবলমাত্র ব্যবহারের ক্ষেত্রে প্রযোজ্যmail()
ফাংশনটির , এই সমস্যা সমাধানের অনেকগুলি পদক্ষেপ যে কোনও পিএইচপি মেলিং সিস্টেমে প্রয়োগ করা যেতে পারে।
আপনার স্ক্রিপ্ট ইমেলগুলি প্রেরণ করছে না বলে বিভিন্ন কারণ রয়েছে। সুস্পষ্ট সিনট্যাক্স ত্রুটি না হলে এই জিনিসগুলি নির্ণয় করা কঠিন। আপনার মুখোমুখি হতে পারে এমন কোনও সম্ভাব্য সমস্যাগুলি খুঁজে পেতে আপনার নীচের চেকলিস্টের মাধ্যমে চালানো দরকার।
নিশ্চিত করুন যে ত্রুটি প্রতিবেদন সক্ষম হয়েছে এবং সমস্ত ত্রুটি প্রতিবেদন করতে সেট করা আছে
আপনার কোডে বাগগুলি নির্মূল করতে এবং পিএইচপি-র মুখোমুখি হওয়া সাধারণ ত্রুটিগুলি চিহ্নিত করার জন্য ত্রুটি প্রতিবেদন করা অপরিহার্য। এই ত্রুটিগুলি পাওয়ার জন্য ত্রুটি প্রতিবেদন সক্ষম করতে হবে। আপনার পিএইচপি ফাইলগুলির উপরে (বা মাস্টার কনফিগারেশন ফাইলে) নীচের কোডটি স্থাপন করা ত্রুটি প্রতিবেদন সক্ষম করে।
error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");
দেখুন কীভাবে আমি পিএইচপি-তে দরকারী ত্রুটি বার্তা পেতে পারি? - এই উত্তর আরও তথ্যের জন্য ।
নিশ্চিত করুন যে mail()
ফাংশনটি বলা হয়েছে
এটি নির্বোধ মনে হতে পারে তবে একটি সাধারণ ত্রুটি হল আসলে mail()
আপনার কোডটিতে ফাংশনটি রাখা ভুলে যাওয়া । নিশ্চিত হয়ে নিন যে এটি সেখানে রয়েছে এবং কোনও মন্তব্য করা হয়নি।
mail()
ফাংশনটি সঠিকভাবে বলা হয়েছে তা নিশ্চিত করুন
বুল মেল (স্ট্রিং $ টু, স্ট্রিং $ সাবজেক্ট, স্ট্রিং $ ম্যাসেজ [, স্ট্রিং $ অতিরিক্ত_হেডারস [, স্ট্রিং $ অতিরিক্ত_প্রেমিটার]])
মেল ফাংশনটি তিনটি প্রয়োজনীয় পরামিতি নেয় এবং allyচ্ছিকভাবে একটি চতুর্থ এবং পঞ্চম। যদি আপনার কলটিতে mail()
কমপক্ষে তিনটি প্যারামিটার না থাকে তবে এটি ব্যর্থ হবে।
যদি আপনার কলটিতে mail()
সঠিক ক্রমে সঠিক পরামিতি না থাকে তবে এটি ব্যর্থও হবে।
সার্ভারের মেল লগগুলি পরীক্ষা করুন
আপনার ওয়েব সার্ভারটি এর মাধ্যমে ইমেল প্রেরণের জন্য সমস্ত প্রচেষ্টা লগ করা উচিত। এই লগগুলির অবস্থানটি পৃথক হবে (আপনার সার্ভার প্রশাসককে তারা কোথায় রয়েছে তা জিজ্ঞাসা করার প্রয়োজন হতে পারে) তবে এগুলি সাধারণত কোনও ব্যবহারকারীর রুট ডিরেক্টরিতে পাওয়া যায় logs
। ভিতরে ইমেল প্রেরণের আপনার প্রয়াস সম্পর্কিত সার্ভারের জানানো ত্রুটি বার্তাগুলি হবে।
পোর্ট সংযোগ ব্যর্থতার জন্য পরীক্ষা করুন
পোর্ট ব্লক একটি খুব সাধারণ সমস্যা, যা বেশিরভাগ বিকাশকারী তাদের এসএমটিপি ব্যবহার করে ইমেল সরবরাহ করতে তাদের কোড সংহত করার সময় মুখোমুখি হয়। এবং, এটি সার্ভার মেলোগগুলিতে সহজেই সনাক্ত করা যায় (উপরে বর্ণিত মেল লগের সার্ভারের অবস্থান সার্ভার থেকে অন্য সার্ভারে পরিবর্তিত হতে পারে)। আপনি যদি একটি ভাগ করা হোস্টিং সার্ভারে থাকেন, 25 এবং 587 পোর্টগুলি ডিফল্টরূপে অবরুদ্ধ থাকে। এই ব্লকটি উদ্দেশ্যমূলকভাবে আপনার হোস্টিং সরবরাহকারীর দ্বারা সম্পন্ন হয়েছে। এমনকি উত্সর্গীকৃত কিছু সার্ভারের ক্ষেত্রেও এটি সত্য। যখন এই পোর্টগুলি অবরুদ্ধ করা হয়, 2525 পোর্টটি ব্যবহার করে সংযোগ স্থাপনের চেষ্টা করুন you যদি আপনি দেখতে পান যে পোর্টটিও অবরুদ্ধ করা আছে, তবে একমাত্র সমাধান হ'ল এই পোর্টগুলি অবরুদ্ধ করতে আপনার হোস্টিং সরবরাহকারীর সাথে যোগাযোগ করা।
হোস্টিং সরবরাহকারীদের বেশিরভাগই কোনও স্প্যাম ইমেল প্রেরণ থেকে তাদের নেটওয়ার্ককে রক্ষা করতে এই ইমেল পোর্টগুলিকে অবরুদ্ধ করে।
প্লেইন / টিএলএস সংযোগের জন্য 25 বা 587 এবং এসএসএল সংযোগের জন্য পোর্ট 465 ব্যবহার করুন। বেশিরভাগ ব্যবহারকারীর জন্য, কিছু হোস্টিং সরবরাহকারীদের দ্বারা নির্ধারিত রেট সীমা এড়াতে 587 পোর্ট ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।
ত্রুটি দমন অপারেটর ব্যবহার করবেন না
যখন ত্রুটি দমন অপারেটরটি @
পিএইচপি-তে কোনও অভিব্যক্তিতে চাপ দেওয়া হয়, তখন সেই অভিব্যক্তি দ্বারা উত্পন্ন হওয়া কোনও ত্রুটি বার্তা উপেক্ষা করা হবে। এমন পরিস্থিতিতে রয়েছে যেখানে এই অপারেটরটি ব্যবহার করা প্রয়োজনীয় তবে মেল প্রেরণ তাদের মধ্যে একটি নয় ।
যদি আপনার কোড থাকে @mail(...)
তবে আপনি গুরুত্বপূর্ণ ত্রুটি বার্তাগুলি লুকিয়ে থাকতে পারেন যা আপনাকে এটির ডিবাগ করতে সহায়তা করবে। অপসারণ করুন @
এবং দেখুন কোনও ত্রুটি প্রতিবেদন করা হয়েছে কিনা।
কংক্রিটের ব্যর্থতার জন্য ঠিক পরে যখন আপনি পরীক্ষা করেনerror_get_last()
তখনই এটি যুক্তিযুক্ত ।
mail()
রিটার্ন মান পরীক্ষা করুন
mail()
ফাংশন:
রিটার্নস TRUE
যদি মেল সফলভাবে প্রসবের জন্য, স্বীকার করা হয়েছে FALSE
অন্যথায়। এটি লক্ষ করা গুরুত্বপূর্ণ যে কেবল মেলটি প্রসবের জন্য গৃহীত হয়েছিল, এর অর্থ এই নয় যে মেলটি আসলে গন্তব্যে পৌঁছে যাবে।
এটি লক্ষ করা গুরুত্বপূর্ণ কারণ:
- আপনি যদি কোনও
FALSE
রিটার্ন মান পান তবে আপনি জানেন যে ত্রুটিটি আপনার সার্ভারটি আপনার মেইল গ্রহণ করার সাথে রয়েছে। এটি সম্ভবত কোডিং সমস্যা নয় তবে একটি সার্ভার কনফিগারেশন সমস্যা। কেন এটি হচ্ছে তা জানতে আপনার সিস্টেম প্রশাসকের সাথে কথা বলতে হবে।
- যদি আপনি কোনও
TRUE
ফেরতের মান পান তবে এর অর্থ এই নয় যে আপনার ইমেল অবশ্যই প্রেরণ করা হবে। এর অর্থ হ'ল পিএইচপি দ্বারা সাফল্যের সাথে ইমেলটি তার নিজ নিজ হ্যান্ডলারের কাছে সার্ভারে প্রেরণ করা হয়েছিল। পিএইচপি-র নিয়ন্ত্রণের বাইরে ব্যর্থতার আরও অনেকগুলি পয়েন্ট রয়েছে যা ইমেলটি প্রেরণ না করতে পারে।
সুতরাং FALSE
সাহায্য করবে ডান দিক আপনি নির্দেশ যেহেতু TRUE
করে আপনার ইমেলটি সাফল্যের সাথে প্রেরণ করা প্রয়োজন নয় । এটি লক্ষ করা গুরুত্বপূর্ণ!
আপনার হোস্টিং সরবরাহকারী আপনাকে ইমেল প্রেরণের অনুমতি দেয় এবং মেল প্রেরণকে সীমাবদ্ধ করে না তা নিশ্চিত করুন
অনেক শেয়ার্ড ওয়েবহোস্ট, বিশেষত ফ্রি ওয়েব হোস্টিং সরবরাহকারীরা হয় তাদের সার্ভার থেকে ইমেলগুলি প্রেরণ করতে দেয় না বা নির্দিষ্ট সময়ের মধ্যে প্রেরণ করা যেতে পারে এমন পরিমাণের সীমাবদ্ধ করে না। এটি স্প্যামারদের তাদের সস্তার পরিষেবাগুলির সুযোগ গ্রহণ থেকে সীমাবদ্ধ করার তাদের প্রচেষ্টার কারণে এটি।
আপনি যদি মনে করেন যে আপনার হোস্টের ইমেলিং সীমাবদ্ধতা রয়েছে বা ইমেলগুলি প্রেরণকে বাধা দিচ্ছে, তাদের এফএকিউগুলি এ জাতীয় কোনও সীমাবদ্ধতা তালিকাবদ্ধ করে কিনা তা পরীক্ষা করে দেখুন। অন্যথায়, ইমেল প্রেরণের আশেপাশে কোনও বিধিনিষেধ আছে কিনা তা যাচাই করতে আপনাকে তাদের সমর্থন পৌঁছাতে হবে।
স্প্যাম ফোল্ডারগুলি পরীক্ষা করুন; ইমেলগুলিকে স্প্যাম হিসাবে চিহ্নিত করা থেকে বিরত করুন
প্রায়শই বিভিন্ন কারণে পিএইচপি (এবং অন্যান্য সার্ভার-সাইড প্রোগ্রামিং ভাষা) এর মাধ্যমে প্রেরিত ইমেলগুলি প্রাপকের স্প্যাম ফোল্ডারে শেষ হয়। আপনার কোডটি সমস্যা সমাধানের আগে সর্বদা সেখানে চেক করুন।
কোনও প্রাপকের স্প্যাম ফোল্ডারে পিএইচপি এর মাধ্যমে প্রেরিত মেল এড়াতে আপনার পিএইচপি কোড এবং অন্যথায় আপনার ইমেলগুলিকে স্প্যাম হিসাবে চিহ্নিত করার সম্ভাবনা হ্রাস করার জন্য বিভিন্ন জিনিস আপনি করতে পারেন। মিচিয়েল ডি মেরের ভাল টিপসের মধ্যে রয়েছে:
- আপনার ইমেলগুলি এবং আপনার ডোমেন নাম এক সাথে জড়িত তা প্রমাণ করতে এবং আপনার ডোমেন নামের ছদ্মবেশ রোধ করতে ইমেল অনুমোদনের পদ্ধতিগুলি যেমন এসপিএফ এবং ডি কেআইএম ব্যবহার করুন । এসপিএফ ওয়েবসাইটটিতে আপনার সাইটের জন্য ডিএনএস তথ্য উত্পন্ন করতে একটি উইজার্ড অন্তর্ভুক্ত রয়েছে।
- আপনার মেইল সার্ভারের আইপি ঠিকানাটি আপনি মেইল প্রেরণের জন্য যে ডোমেন নামটি ব্যবহার করেন তা নির্দেশ করে তা নিশ্চিত করতে আপনার বিপরীত ডিএনএস পরীক্ষা করে দেখুন ।
- আপনি যে আইপি-ঠিকানাটি ব্যবহার করছেন তা নিশ্চিত হয়ে নিন তা কোনও কালো তালিকাতে নেই তা নিশ্চিত করুন
- নিশ্চিত করুন যে উত্তরটি দেওয়া ঠিকানাটি একটি বৈধ, বিদ্যমান ঠিকানা।
- কেবলমাত্র ইমেল ঠিকানা (উদাঃ
"John Smith" <john@blacksmiths-international.com>
) নয়, টু ক্ষেত্র্রে ঠিকানার পুরো, আসল নামটি ব্যবহার করুন ।
- আপনার অপব্যবহারের অ্যাকাউন্টগুলি, যেমন গালাগাল @ yourdomain.com এবং postmaster@yourdomain.com হিসাবে নিরীক্ষণ করুন। তার অর্থ - এই অ্যাকাউন্টগুলি বিদ্যমান রয়েছে তা নিশ্চিত করুন, তাদের কী পাঠানো হয়েছে তা পড়ুন এবং অভিযোগের ভিত্তিতে কাজ করুন।
- শেষ অবধি, সাবস্ক্রাইব করা সত্যিই সহজ করুন। অন্যথায়, আপনার ব্যবহারকারীরা স্প্যাম বোতামটি টিপে সাবস্ক্রাইব করবেন এবং এটি আপনার খ্যাতিকে প্রভাবিত করবে।
দেখুন আপনি কীভাবে নিশ্চিত হন যে আপনি প্রোগ্রামযুক্তভাবে পাঠানো ইমেলটি স্বয়ংক্রিয়ভাবে স্প্যাম হিসাবে চিহ্নিত করা হয়নি? এই বিষয়ে আরও জন্য।
নিশ্চিত করুন যে সমস্ত মেল শিরোনাম সরবরাহ করা হয়েছে
কিছু স্প্যাম সফ্টওয়্যার মেইলটিকে প্রত্যাখ্যান করবে যদি এটি "থেকে" এবং "জবাব দেওয়া-" এর মতো সাধারণ শিরোনাম অনুপস্থিত থাকে:
$headers = array("From: from@example.com",
"Reply-To: replyto@example.com",
"X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("\r\n", $headers);
mail($to, $subject, $message, $headers);
নিশ্চিত করুন যে মেল শিরোনামগুলির কোনও সিনট্যাক্স ত্রুটি নেই
অবৈধ শিরোনামগুলি শিরোনামহীন হওয়ার মতোই খারাপ। একটি ভুল চরিত্র আপনার ইমেল লাইনচ্যুত হতে পারে এটি হতে পারে। আপনার সিনট্যাক্সটি সঠিক কিনা তা নিশ্চিত করতে ডাবল-চেক করুন পিএইচপি আপনার জন্য এই ত্রুটিগুলি ধরবে না ।
$headers = array("From from@example.com", // missing colon
"Reply To: replyto@example.com", // missing hyphen
"X-Mailer: "PHP"/" . PHP_VERSION // bad quotes
);
কোনও ফ্যাক্স From:
প্রেরক ব্যবহার করবেন না
মেলটিতে অবশ্যই একটি প্রেরক থাকতে হবে: আপনি কেবল কোনও মান ব্যবহার করতে পারবেন না । বিশেষত ব্যবহারকারীর দ্বারা প্রেরিত ঠিকানাগুলি মেলগুলি অবরুদ্ধ করার একটি নিশ্চিত উপায়:
$headers = array("From: $_POST[contactform_sender_email]"); // No!
কারণ: আপনার ওয়েব বা মেইল সার্ভার প্রেরণে এসপিএফ / ডিকেআইএম-হোয়াইট লিস্ট করা নয় যা হটমেইল বা @ জিমেইল ঠিকানার জন্য দায়ী বলে। এমনকি From:
এটি প্রেরক ডোমেনগুলির সাথে চুপচাপ মেলগুলি ড্রপ করতে পারে যা এটির জন্য কনফিগার করা হয়নি।
প্রাপকের মানটি সঠিক কিনা তা নিশ্চিত করুন
কখনও কখনও সমস্যাটি ইমেল প্রাপকের জন্য একটি ভুল মান থাকার মতোই সহজ। এটি একটি ভুল ভেরিয়েবল ব্যবহারের কারণে হতে পারে।
$to = 'user@example.com';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to
এটি পরীক্ষা করার আরেকটি উপায় হ'ল mail()
ফাংশন কলের প্রাপকের মানটিকে হার্ড কোড করা :
mail('user@example.com', $subject, $message, $headers);
এটি সমস্ত mail()
পরামিতিগুলিতে প্রয়োগ করতে পারে ।
একাধিক অ্যাকাউন্টে প্রেরণ করুন
ইমেল অ্যাকাউন্ট সংক্রান্ত সমস্যাগুলি থেকে মুক্তি দিতে আপনার ইমেলটি বিভিন্ন ইমেল সরবরাহকারীদের একাধিক ইমেল অ্যাকাউন্টে প্রেরণ করুন । যদি আপনার ইমেলগুলি কোনও ব্যবহারকারীর জিমেইল অ্যাকাউন্টে না পৌঁছে, একই ইমেলগুলি ইয়াহু অ্যাকাউন্ট, একটি হটমেল অ্যাকাউন্ট এবং একটি নিয়মিত পিওপি 3 অ্যাকাউন্টে (আপনার আইএসপি-সরবরাহিত ইমেল অ্যাকাউন্টের মতো) প্রেরণ করুন।
ইমেলগুলি সমস্ত বা অন্য কোনও ইমেল অ্যাকাউন্টে পৌঁছে যদি আপনি জানেন যে আপনার কোড ইমেলগুলি প্রেরণ করছে তবে সম্ভবত ইমেল অ্যাকাউন্ট সরবরাহকারী কোনও কারণে তাদের ব্লক করছে। যদি ইমেলটি কোনও ইমেল অ্যাকাউন্টে না আসে, সমস্যাটি আপনার কোডের সাথে সম্পর্কিত হওয়ার সম্ভাবনা বেশি।
কোডটি ফর্ম পদ্ধতির সাথে মেলে কিনা তা নিশ্চিত করুন
আপনি যদি নিজের ফর্ম পদ্ধতিটি সেট করে POST
রেখেছেন তবে নিশ্চিত হয়ে নিন যে আপনি $_POST
নিজের ফর্মের মান সন্ধান করতে ব্যবহার করছেন। আপনি যদি এটি সেট করে থাকেন GET
বা একেবারেই সেট না করে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনি $_GET
নিজের ফর্মের মানগুলি সন্ধান করার জন্য ব্যবহার করছেন using
আপনার ফর্মের action
মানটি সঠিক অবস্থানে দেখায় তা নিশ্চিত করুন
আপনার ফর্মের action
বৈশিষ্ট্যে এমন কোনও মান রয়েছে যা আপনার পিএইচপি মেলিং কোডকে নির্দেশ করে তা নিশ্চিত করুন ।
<form action="send_email.php" method="POST">
ওয়েব হোস্ট ইমেল প্রেরণে সমর্থন করে তা নিশ্চিত করুন
কিছু ওয়েব হোস্টিং সরবরাহকারী তাদের সার্ভারের মাধ্যমে ইমেল প্রেরণকে অনুমতি দেয় না বা সক্ষম করে না। এর কারণগুলি পরিবর্তিত হতে পারে তবে তারা যদি মেল প্রেরণকে অক্ষম করে থাকে তবে আপনার জন্য সেই ইমেলগুলি প্রেরণের জন্য কোনও তৃতীয় পক্ষ ব্যবহার করে এমন একটি বিকল্প পদ্ধতি ব্যবহার করতে হবে।
তাদের প্রযুক্তিগত সহায়তায় একটি ইমেল (তাদের অনলাইন সমর্থন বা FAQ এ ভ্রমণের পরে) আপনার সার্ভারে ইমেল ক্ষমতা উপলব্ধ কিনা তা স্পষ্ট করা উচিত।
localhost
মেল সার্ভারটি কনফিগার করা আছে তা নিশ্চিত করুন
যদি আপনি ডাব্লুএএমপি, এমএএমপি বা এক্সএএমপিপি ব্যবহার করে আপনার স্থানীয় ওয়ার্কস্টেশনে বিকাশ করছেন তবে সম্ভবত কোনও ওয়ার্কস্টেশনে কোনও ইমেল সার্ভার ইনস্টল করা নেই। এক ছাড়া পিএইচপি ডিফল্টরূপে মেল পাঠাতে পারে না।
আপনি একটি মৌলিক মেল সার্ভার ইনস্টল করে এটি কাটিয়ে উঠতে পারেন। উইন্ডোজ জন্য আপনি বিনামূল্যে বুধবার্তা মেল ব্যবহার করতে পারেন ।
আপনি নিজের ইমেলগুলি প্রেরণের জন্য এসএমটিপি ব্যবহার করতে পারেন। দেখুন এই মহান উত্তর থেকে বিকাশ দ্বিবেদী এই কিভাবে করতে হবে জানতে।
পিএইচপি এর কাস্টম সক্ষম করুন mail.log
আপনার এমটিএ এবং পিএইচপি এর লগ ফাইল ছাড়াও, আপনি বিশেষভাবে ফাংশনটির জন্য লগিংmail()
সক্ষম করতে পারেন । এটি সম্পূর্ণ এসএমটিপি মিথস্ক্রিয়া রেকর্ড করে না, তবে কমপক্ষে ফাংশন কল প্যারামিটার এবং অনুরোধ স্ক্রিপ্ট।
ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);
বিস্তারিত জানতে http://php.net/manual/en/mail.configration.php দেখুন । (এটা এই বিকল্প সক্ষম সেরা php.ini
বা .user.ini
বা .htaccess
সম্ভবত।)
একটি মেল পরীক্ষার পরিষেবা দিয়ে পরীক্ষা করুন
আপনার এমটিএ / ওয়েবসার্ভার সেটআপটি পরীক্ষা করতে আপনি বিভিন্ন ডেলিভারি এবং স্প্যামনেস চেকিং পরিষেবা ব্যবহার করতে পারেন। সাধারণত আপনি এখানে একটি মেল প্রোব প্রেরণ করুন: তাদের ঠিকানা, তারপরে একটি বিতরণ রিপোর্ট এবং আরও কংক্রিট ব্যর্থতা বা বিশ্লেষণ পরে পান:
একটি আলাদা মেলার ব্যবহার করুন
পিএইচপি-র বিল্ট mail()
ফাংশনটি সুবিধাজনক এবং প্রায়শই কাজটি সম্পন্ন করে তবে এতে তার ত্রুটি রয়েছে । ভাগ্যক্রমে এমন বিকল্প রয়েছে যা উপরে উল্লিখিত অনেকগুলি সমস্যা সমাধান সহ আরও শক্তি এবং নমনীয়তা সরবরাহ করে:
যার সবগুলিই একটি পেশাদার এসএমটিপি সার্ভার / পরিষেবা সরবরাহকারীর সাথে একত্রিত করা যায়। (কারণ আদর্শ 08/15 শেয়ার্ড ওয়েব হোস্টিং পরিকল্পনা হিট বা মিস হয়ে থাকে যখন এটি ইমেল সেটআপ / কনফিগারেশনে আসে))