পিএইচপি মেল ফাংশনটি ইমেল প্রেরণ সম্পূর্ণ করে না


477
<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com';
    $to = 'contact@yoursite.com';
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) {
            echo '<p>Your message has been sent!</p>';
        } else {
            echo '<p>Something went wrong, go back and try again!</p>';
        }
    }
?>

আমি একটি সাধারণ মেল ফর্ম তৈরি করার চেষ্টা করেছি। ফর্মটি নিজেই আমার index.htmlপৃষ্ঠায় রয়েছে তবে এটি পৃথক "আপনার জমা দেওয়ার জন্য আপনাকে ধন্যবাদ" পৃষ্ঠাতে জমা দেয় thankyou.php, যেখানে উপরের পিএইচপি কোড এম্বেড করা আছে। কোডটি নিখুঁতভাবে জমা দেয় তবে কোনও ইমেল প্রেরণ করে না। আমি এটা কিভাবে ঠিক করবো?


2
স্থানীয় কম্পিউটারে বা লাইভ হোস্টে আপনার প্রোগ্রামটি
তামিল সেলভান সি

6
1. আপনি কি নিশ্চিত যে এটি আপনার স্প্যামে যাচ্ছে না? ২. আপনার বক্সে সেন্ডমেল কনফিগার করা আছে?
স্টিভেন মোসলে

এটি একটি লাইভ হোস্টে এটি আমার স্প্যামে চলে না ... আমি নিশ্চিত না যে আমার বাক্সে সেন্ডমেল কনফিগার করে আপনি কী বোঝাতে চেয়েছেন যাতে আমি ধরে নিই না?
ব্যবহারকারী 3818620

বিনা প্রেরণে চেষ্টা করুন$from
আর্টেম ইলচেঙ্কো

উত্তর:


511

যদিও এই উত্তরের কিছু অংশ রয়েছে যা কেবলমাত্র ব্যবহারের ক্ষেত্রে প্রযোজ্য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 শেয়ার্ড ওয়েব হোস্টিং পরিকল্পনা হিট বা মিস হয়ে থাকে যখন এটি ইমেল সেটআপ / কনফিগারেশনে আসে))


11
ভাল লিখেছেন, জন। আমি কেবল একটি জিনিস যুক্ত করব: প্রেরণকারী মেল সার্ভারের মেল সার্ভার লগগুলি পরীক্ষা করা (এটি স্থানীয়ভাবে বা দূরবর্তী অবস্থানের দ্বারা হোস্ট করা যাই হোক না কেন), যদি সম্ভব হয় তবে প্রায়শই সমস্যাটির কারণ কী তা নিয়ে আলোকপাত করতে পারে। এই লগগুলি দেখানো উচিত 1) প্রেরণকারী মেল সার্ভারের দ্বারা পিএইচপি স্ক্রিপ্ট থেকে বার্তাটি প্রাপ্ত হয়েছে এবং না এবং 2) প্রেরণকারী মেইল ​​সার্ভার থেকে প্রাপ্ত এমএক্স গ্রহণযোগ্য গ্রহণযোগ্য কি না।
mti2935

@ mti2935 এটি এত সহায়ক যে আমি অবাক হয়েছি আমি এটিটি মিস করেছি। আমি শীঘ্রই এটি যোগ করা নিশ্চিত হবে। :)
জন কনডে

1
আমি ব্যবহার না করে শুরু করব mail(), এটি এতটা খারাপ কাজ করে এবং অন্য কোনও মেল লাইব্রেরির চেয়ে ডিবাগ করা আরও শক্ত

1
000webhost এ একই ওয়েবসাইট নেটাই নেট ডোমেইনে সফলভাবে এবং দ্রুত ইমেল প্রেরণ করে তবে সাইট 88.net এ আমার একই ওয়েবসাইটটি রয়েছে যা আমি কনসোলে পেয়েছি যে বার্তাটি সফলভাবে প্রেরণ করে তবে আমি কোনও বার্তা পাই না don't কমুফ.কম ডোমেইনেও আমি ত্রুটি পেয়েছি ((একই হোস্টের একই ওয়েবসাইটটি কেবল নেটাই নেট ডোমেনে কাজ করে, নেট 16.net খুব কার্যকরভাবে কাজ করে)
নিকোলাস পাপাকনস্ট্যান্টিনু

1
আমার প্রশ্নটি ( স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / 8৪৮6667373 / )) এটির একটি সদৃশ হিসাবে চিহ্নিত হয়েছে, তবে আমি এখনও এটি বের করতে পারি না। কোন পরামর্শ?
জ্যাচারি এলকিন্স

37

মেল ফাংশনে একটি মেল শিরোনাম যুক্ত করুন:

$header = "From: noreply@example.com\r\n";
$header.= "MIME-Version: 1.0\r\n";
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$header.= "X-Priority: 1\r\n";

$status = mail($to, $subject, $message, $header);

if($status)
{
    echo '<p>Your mail has been sent!</p>';
} else {
    echo '<p>Something went wrong. Please try again!</p>';
}

25
  1. মেল ফাংশনে সর্বদা শিরোনাম প্রেরণের চেষ্টা করুন।
  2. আপনি যদি লোকালহোস্টের মাধ্যমে মেল প্রেরণ করছেন তবে মেল প্রেরণের জন্য এসএমটিপি সেটিংস করুন।
  3. আপনি যদি কোনও সার্ভারের মাধ্যমে মেল প্রেরণ করছেন তবে ইমেল প্রেরণ বৈশিষ্ট্যটি আপনার সার্ভারে সক্ষম হয়েছে কিনা তা পরীক্ষা করুন।

20

আপনি যদি নিজের ইমেল প্রেরণের জন্য একটি এসএমটিপি কনফিগারেশন ব্যবহার করেন তবে পরিবর্তে পিএইচপিএমেলার ব্যবহার করে দেখুন। আপনি https://github.com/PHPMailer/PHPMailer থেকে লাইব্রেরিটি ডাউনলোড করতে পারেন ।

আমি আমার ইমেলটি এইভাবে প্রেরণে তৈরি করেছি:

function send_mail($email, $recipient_name, $message='')
{
    require("phpmailer/class.phpmailer.php");

    $mail = new PHPMailer();

    $mail->CharSet = "utf-8";
    $mail->IsSMTP();                                      // Set mailer to use SMTP
    $mail->Host = "mail.example.com";  // Specify main and backup server
    $mail->SMTPAuth = true;     // Turn on SMTP authentication
    $mail->Username = "myusername";  // SMTP username
    $mail->Password = "p@ssw0rd"; // SMTP password

    $mail->From = "me@walalang.com";
    $mail->FromName = "System-Ad";
    $mail->AddAddress($email, $recipient_name);

    $mail->WordWrap = 50;                                 // Set word wrap to 50 characters
    $mail->IsHTML(true);                                  // Set email format to HTML (true) or plain text (false)

    $mail->Subject = "This is a Sampleenter code here Email";
    $mail->Body    = $message;
    $mail->AltBody = "This is the body in plain text for non-HTML mail clients";
    $mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
    $mail->addAttachment('files/file.xlsx');

    if(!$mail->Send())
    {
       echo "Message could not be sent. <p>";
       echo "Mailer Error: " . $mail->ErrorInfo;
       exit;
    }

    echo "Message has been sent";
}

2
আমারও ব্যবহার করতে হয়েছিল: প্রয়োজনীয় ("phpmailer / class.smtp.php");
ডগ

15

মেল প্রেরণের আগে কিছু শিরোনাম যুক্ত করুন:

<?php 
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com'; 
$to = 'contact@yoursite.com'; 
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html\r\n";
$headers .= 'From: from@example.com' . "\r\n" .
'Reply-To: reply@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

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

এবং আরও একটি জিনিস। mail()ফাংশন স্থানীয় হোস্ট মধ্যে কাজ করছে না। আপনার কোডটি একটি সার্ভারে আপলোড করুন এবং চেষ্টা করুন।


1
এটি প্রকৃতপক্ষে ফর্মটি জমা দিয়েছিল - আমার প্রশ্নটি এখন হবে ... আমি কীভাবে ব্যবহারকারীর টাইপ ইমেলটিতে দেখাব, এখন আমি এটির সাথে প্রতিস্থাপন করেছি ...
ব্যবহারকারীর 3818620

এটি স্প্যাম ফোল্ডার থেকে মেল প্রতিরোধ করবে? আমি দেখেছি যে আমরা আপনার কোড জিমেইলে এই পদ্ধতিটি ব্যবহার করে 10 টিরও বেশি মেইল ​​স্প্যামে প্রেরণ করি।
jewelhuq

ওপিতে এই লাইনটি রয়েছে: $from = 'From: yoursite.com'; যা সম্পূর্ণ বৈধ ইমেল ঠিকানার মতো দেখায় না, এর কোনও স্থানীয় অংশ নেই। আপনি থেকে শিরোনাম প্রতিস্থাপন করেছেন এবং অতিরিক্ত একটি যুক্ত করেছেন। বা বরং $fromউপরেরটি আপনার উদাহরণে অপ্রয়োজনীয়। এবং বিকৃত হওয়া সম্ভবত ওপিগুলির আসল সমস্যা ছিল।
অগ্রগতি

13

এটি নিম্নলিখিত কাজ করে আমার জন্য 000Whost এ কাজ করেছে:

$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: ". $from. "\r\n";
$headers .= "Reply-To: ". $from. "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
$headers .= "X-Priority: 1" . "\r\n";

ইমেল প্রেরণের সময় সরাসরি ইমেল ঠিকানা প্রবেশ করুন:

mail('email@gmail.com', $subject, $message, $headers)

ব্যবহার করুন ''এবং না ""

এই কোডটি কাজ করে, তবে ইমেলটি অর্ধ ঘন্টা লম্বা সহ পেল।


10

বেশিরভাগ ক্ষেত্রে mail()ফাংশন ভাগ করে নেওয়া হোস্টিংয়ে অক্ষম থাকে। এসএমটিপি ব্যবহার করা আরও ভাল বিকল্প। সেরা বিকল্পটি হ'ল জিমেইল বা সেন্ডগ্রিড।


SMTPconfig.php

<?php 
    $SmtpServer="smtp.*.*";
    $SmtpPort="2525"; //default
    $SmtpUser="***";
    $SmtpPass="***";
?>

SMTPmail.php

<?php
class SMTPClient
{

    function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
    {

        $this->SmtpServer = $SmtpServer;
        $this->SmtpUser = base64_encode ($SmtpUser);
        $this->SmtpPass = base64_encode ($SmtpPass);
        $this->from = $from;
        $this->to = $to;
        $this->subject = $subject;
        $this->body = $body;

        if ($SmtpPort == "") 
        {
            $this->PortSMTP = 25;
        }
        else
        {
            $this->PortSMTP = $SmtpPort;
        }
    }

    function SendMail ()
    {
        $newLine = "\r\n";
        $headers = "MIME-Version: 1.0" . $newLine;  
        $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  

        if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)) 
        {
            fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n"); 
            $talk["hello"] = fgets ( $SMTPIN, 1024 ); 
            fputs($SMTPIN, "auth login\r\n");
            $talk["res"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpUser."\r\n");
            $talk["user"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpPass."\r\n");
            $talk["pass"]=fgets($SMTPIN,256);
            fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n"); 
            $talk["From"] = fgets ( $SMTPIN, 1024 ); 
            fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n"); 
            $talk["To"] = fgets ($SMTPIN, 1024); 
            fputs($SMTPIN, "DATA\r\n");
            $talk["data"]=fgets( $SMTPIN,1024 );
            fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\n".$headers."\n\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
            $talk["send"]=fgets($SMTPIN,256);
            //CLOSE CONNECTION AND EXIT ... 
            fputs ($SMTPIN, "QUIT\r\n"); 
            fclose($SMTPIN); 
            // 
        } 
        return $talk;
    } 
}
?>

contact_email.php

<?php 
include('SMTPconfig.php');
include('SMTPmail.php');
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $to = "";
    $from = $_POST['email'];
    $subject = "Enquiry";
    $body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
    $SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
    $SMTPChat = $SMTPMail->SendMail();
}
?>

সার্ভারে স্মাইল্ট ব্যবহারকারী এবং পাসওয়ার্ডটি সরলরেখায় সংরক্ষণ করা কি ভাল ধারণা?
জুড়ী

@ জুড়ি সম্ভবত নেই ... godশ্বর আমি কীভাবে মেল ফাংশনটি কাজ করতে পারি তা অনুধাবন করতে পারি না: (

9

আপনি যদি কেবলমাত্র mail()ফাংশনটি ব্যবহার করেন , আপনার কনফিগারেশন ফাইলটি সম্পূর্ণ করতে হবে।

আপনাকে মেল এক্সপেনশনটি খুলতে হবে, এবং আরও কিছু সেট করতে হবে SMTP smtp_portএবং সর্বাধিক গুরুত্বপূর্ণ, আপনার ব্যবহারকারীর নাম এবং পাসওয়ার্ড। তা ছাড়া মেল পাঠানো যায় না। এছাড়াও, আপনি PHPMailপাঠাতে ক্লাসটি ব্যবহার করতে পারেন can


9

এই দুটি জিনিস আলাদাভাবে এবং একসাথে চেষ্টা করুন:

  1. অপসারণ if($_POST['submit']){}
  2. সরান $from(শুধু আমার অন্ত্র)

8

আমি মনে করি এটি কৌশলটি করা উচিত। আমি if(issetএইচটিএমএল থেকে পিএইচপি পৃথক করতে শরীরের ভেরিয়েবলগুলিতে সবেমাত্র একটি যুক্ত এবং সংযুক্তি যুক্ত করেছি।

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = 'contact@yoursite.com'; 
    $subject = 'Customer Inquiry';
    $body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;

if (isset($_POST['submit'])) 
{
    if (mail ($to, $subject, $body, $from)) 
    { 
        echo '<p>Your message has been sent!</p>';
    } 
    else 
    { 
        echo '<p>Something went wrong, go back and try again!</p>'; 
    }
}

?>

8

যে কেউ এটিকে এগিয়ে যেতে দেখেন, আমি তাদের ব্যবহারের পরামর্শ দেব না mail। কিছু উত্তর আছে যে এটি স্পর্শ, কিন্তু কেন এটি না।

পিএইচপি-র mailকাজটি কেবল অস্বচ্ছ নয়, কাজটি করতে আপনি যা এমটিএ ব্যবহার করেন (অর্থাত্ সেন্ডমেল ) এটি সম্পূর্ণরূপে নির্ভর করে । mailহবে শুধুমাত্র আপনাকে বলতে যদি MTA এর তা গ্রহণ করতে ব্যর্থ হয়েছে (যখন আপনি পাঠাতে চেষ্টা অর্থাত Sendmail ডাউন ছিল)। এটি আপনাকে জানাতে পারে না যে মেলটি সফল হয়েছিল কি না কারণ এটি মেল বন্ধ হয়ে গেছে। যেমন ( জন কনডির উত্তরের বিবরণ হিসাবে), আপনি এখন এমটিএর লগগুলির সাথে ঝাঁকুনি পাবেন এবং আশা করি এটি এটি ঠিক করতে ব্যর্থতার বিষয়ে আপনাকে যথেষ্ট পরিমাণে বলবে। আপনি যদি কোনও শেয়ার্ড হোস্টে থাকেন বা এমটিএ লগগুলিতে অ্যাক্সেস না থাকলে আপনার ভাগ্য নেই of দুঃখের বিষয়, লিনাক্সের জন্য বেশিরভাগ ভ্যানিলা ইনস্টলের জন্য ডিফল্ট এটি এইভাবে পরিচালনা করে।

একটি মেল লাইব্রেরি ( পিএইচপিমেলার , জেন্ড ফ্রেমওয়ার্ক 2+ ইত্যাদি) এর থেকে আলাদা কিছু করে mail। তারা গ্রহণযোগ্য মেল সার্ভারে সরাসরি একটি সকেট খুলবে এবং তারপরে সরাসরি সেই সকেটের উপরে এসএমটিপি মেল কমান্ডগুলি প্রেরণ করে। অন্য কথায়, বর্গটি তার নিজস্ব এমটিএ হিসাবে কাজ করে (নোট করুন যে আপনি গ্রন্থাগারগুলিকে mailচূড়ান্তভাবে মেলটি প্রেরণ করতে ব্যবহার করতে বলতে পারেন , তবে আমি আপনাকে দৃ strongly়ভাবে সুপারিশ করব যে এটি না করা)।

এর অর্থ আপনি তারপরে প্রাপ্তি সার্ভার থেকে সরাসরি প্রতিক্রিয়া দেখতে পাবেন (পিএইচপিএমেলারে, উদাহরণস্বরূপ, আপনি ডিবাগিং আউটপুট চালু করতে পারেন )। কোনও মেল প্রেরণ করতে ব্যর্থ হয়েছে বা কেন তা অনুমান করার দরকার নেই।

আপনি যদি এসএমটিপি ব্যবহার করেন (যেমন আপনি কল করছেন isSMTP()), আপনি SMTPDebugসম্পত্তিটি ব্যবহার করে এসএমটিপি কথোপকথনের একটি বিশদ প্রতিলিপি পেতে পারেন ।

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

$mail->SMTPDebug = 2;

আপনি আরও ভাল ইন্টারফেসের সুবিধা পাবেন। সঙ্গে mailআপনি আপনার সমস্ত হেডার, সংযুক্তি ইত্যাদি সেট আপ করার জন্য একটি লাইব্রেরি সহ আছে, আপনি যে কাজ করতে ডেডিকেটেড ফাংশন আছে। এর অর্থ এটিও হ'ল ফাংশনটি সমস্ত চতুর অংশগুলি করছে (শিরোনামের মতো)।


6
$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
    $subject = $name;
    // To send HTML mail, the Content-type header must be set.
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From:' . $email. "\r\n"; // Sender's Email
    //$headers .= 'Cc:' . $email. "\r\n"; // Carbon copy to Sender
    $template = '<div style="padding:50px; color:white;">Hello ,<br/>'
        . '<br/><br/>'
        . 'Name:' .$name.'<br/>'
        . 'Email:' .$email.'<br/>'
        . '<br/>'
        . '</div>';
    $sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
    // Message lines should not exceed 70 characters (PHP rule), so wrap it.
    $sendmessage = wordwrap($sendmessage, 70);
    // Send mail by PHP Mail Function.
    mail($reciver, $subject, $sendmessage, $headers);
    echo "Your Query has been received, We will contact you soon.";
} else {
    echo "<span>* invalid email *</span>";
}

6

আপনি কোডআইগনিটার দ্বারা কনফিগার ইমেল ব্যবহার করতে পারেন । উদাহরণস্বরূপ, এসএমটিপি (সহজ উপায়) ব্যবহার করে :

$config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'mail.domain.com', // Your SMTP host
        'smtp_port' => 26, // Default port for SMTP
        'smtp_user' => 'name@domain.com',
        'smtp_pass' => 'password',
        'mailtype' => 'html',
        'charset' => 'iso-8859-1',
        'wordwrap' => TRUE
);
$message = 'Your msg';
$this->load->library('email', $config);
$this->email->from('name@domain.com', 'Title');
$this->email->to('emaildestination@domain.com');
$this->email->subject('Header');
$this->email->message($message);

if($this->email->send()) 
{
   // Conditional true
}

এটা আমার জন্য কাজ করে!


1
fsockopen () [function.fsockopen]: php_network_getaddresses: getaddrinfo ব্যর্থ: এ জাতীয় কোনও হোস্ট জানা যায় নি। - যদি আমি এই ত্রুটির মুখোমুখি হই, তবে কারণটি কী এবং কী করা দরকার?
চৌদ্দুরি সাদমান মাহমুদ

1
"আমার জন্য কাজ করে" কেবলমাত্র অজানা তথ্য, তবে প্রকৃতপক্ষে ব্যাখ্যাটির বেশি নয়। পোর্ট এবং এসএমটিপি পাসওয়ার্ড বেশিরভাগ ব্যবহারকারীর জন্য বিভ্রান্তিকর হবে।
মারিও

কি "কনফিগ ইমেল" ? আপনার কি রেফারেন্স আছে?
পিটার মর্টেনসেন

4

এটা চেষ্টা কর

if ($_POST['submit']) {
    $success= mail($to, $subject, $body, $from);
    if($success)
    { 
        echo '
        <p>Your message has been sent!</p>
        ';
    } else { 
        echo '
        <p>Something went wrong, go back and try again!</p>
        '; 
    }
}

4

হতে পারে সমস্যাটি মেল সার্ভারের কনফিগারেশন। এই ধরণের সমস্যা এড়াতে বা আপনাকে মেল সার্ভার সমস্যা সম্পর্কে চিন্তা করতে হবে না, আমি আপনাকে পিএইচপিমেইলার ব্যবহার করার পরামর্শ দিচ্ছি

এটি এমন একটি প্লাগইন যার মেল প্রেরণের জন্য প্রয়োজনীয় সমস্ত কিছু রয়েছে এবং আপনার কেবলমাত্র অ্যাকাউন্টে নিতে হবে এসএমটিপি পোর্ট (পোর্ট: 25 এবং 465) সক্ষম করা।

require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';

$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
    //Server settings
    $mail->SMTPDebug = 0;
    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'correo@gmail.com';
    $mail->Password = 'contrasenia';
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;

    // Recipients
    $mail->setFrom('correo@gmail.com', 'my name');
    $mail->addAddress('destination@correo.com');

    // Attachments
    $mail->addAttachment('optional file');         // Add files, is optional

    // Content
    $mail->isHTML(true);// Set email format to HTML
    $mail->Subject = utf8_decode("subject");
    $mail->Body    = utf8_decode("mail content");
    $mail->AltBody = '';
    $mail->send();
}
catch (Exception $e) {
    $error = $mail->ErrorInfo;
}

1
আইএএনএ 585 বন্দর দ্বারা 465 বন্দরটি প্রতিস্থাপন করেছে This এটি ডিফল্ট মেল জমা দেওয়ার পোর্ট। কোনও ইমেল ক্লায়েন্ট বা আউটগোয়িং সার্ভার যখন কোনও সঠিক মেইল ​​সার্ভার দ্বারা চালিত হওয়ার জন্য কোনও ইমেল জমা দিচ্ছে, এটি সর্বদা এসএমটিপি পোর্ট 587 ডিফল্ট পোর্ট হিসাবে ব্যবহার করা উচিত। মেইলগান . com/blog/ which-smtp-port- বোঝার-પોર્ટগুলি-25-465-587 দেখুন । একটি বুদ্ধিমান পরামর্শ: আপনি কী করছেন সে সম্পর্কে যদি পুরোপুরি সচেতন না হন তবে আপনার কম্পিউটারে পোর্টগুলি খুলবেন না!
ক্ষতি

3

আপনার সার্ভারে সেন্ডমেল ইনস্টল করা আছে তা নিশ্চিত করুন।

আপনি যদি নিজের কোডটি যাচাই করেছেন এবং যাচাই করেছেন যে সেখানে কোনও ভুল নেই, তবে / ভার / মেইলে যান এবং folder ফোল্ডারটি খালি কিনা তা পরীক্ষা করে দেখুন।

যদি এটি খালি থাকে, আপনার একটি করতে হবে:

sudo apt-get install sendmail

আপনি যদি উবুন্টু সার্ভারে থাকেন।


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

এই মন্তব্যটি কি আমার উত্তরের প্রসঙ্গে? কারণ আমার সাথে এটি ঘটেনি এবং আমি এটিকে ঠিক একইভাবে সমাধান করিনি। প্রশ্নের বিভিন্ন সম্ভাব্য উত্তর রয়েছে, অতীতে উপরোক্ত সমস্ত চেষ্টা করার পরেও আমার মধ্যে তাদের একজন হওয়ায় আমার উত্তরটি আমার সমস্যার সমাধান করে দিয়েছে, তাই আমি এটিকে এখানে আরও একটি সম্ভাব্য সমাধান হিসাবে প্রস্তাব করেছি।
ড্যানিয়েল

হ্যাঁ অবশ্যই. এটি সম্ভাব্য উত্তরগুলির মধ্যে একটি। তবে এটি এখনও পর্যাপ্ত আইএমও করার উপায়। এটিকে "আপনার একটি এমটিএ দরকার" - তে সাধারণীকরণ করা হচ্ছে - এবং এখানে কয়েকটি সেটআপ গাইড যুক্ত রয়েছে… তবে এটি আরও ব্যবহারিক হতে পারে।
মারিও

3

প্রথমত, মেল () ফাংশনের জন্য আপনার কাছে অনেকগুলি পরামিতি থাকতে পারে ... আপনি সর্বোচ্চ পাঁচটি রাখতে সক্ষম হবেন, mail(to, subject, message, headers, parameters);

$fromভেরিয়েবল যতদূর যায়, লিনাক্স সিপ্যানেল ব্যবহার করা হলে এটি স্বয়ংক্রিয়ভাবে আপনার ওয়েবহোস্ট থেকে আসা উচিত । এটি স্বয়ংক্রিয়ভাবে আপনার সিপ্যানেল ব্যবহারকারীর নাম এবং আইপি ঠিকানা থেকে আসে।

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = 'contact@yoursite.com';
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

আপনার মেইল ​​() ফাংশনে ভেরিয়েবলের সঠিক ক্রম রয়েছে কিনা তাও নিশ্চিত করুন।

এই mail($to, $subject, $message, etc.)ক্রমে, অন্যথায় এটি কাজ না করার সুযোগ রয়েছে।


3

আপনি পিএইচপি সঙ্গে মেইল পাঠানোর সমস্যা হলে, মত একটি বিকল্প বিবেচনা PHPMailer বা SwiftMailer

আমি যখনই পিএইচপি দিয়ে মেইল ​​প্রেরণের প্রয়োজন হয় আমি সাধারণত সুইফটমেলার ব্যবহার করি।


বেসিক ব্যবহার:

require 'mail/swift_required.php';

$message = Swift_Message::newInstance()
    // The subject of your email
    ->setSubject('Jane Doe sends you a message')
    // The from address(es)
    ->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
    // Here, you put the content of your email
    ->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');

if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
    echo json_encode([
        "status" => "OK",
        "message" => 'Your message has been sent!'
    ], JSON_PRETTY_PRINT);
} else {
    echo json_encode([
        "status" => "error",
        "message" => 'Oops! Something went wrong!'
    ], JSON_PRETTY_PRINT);
}

সুইফটমেলারটি কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও তথ্যের জন্য অফিসিয়াল ডকুমেন্টেশন দেখুন ।


3

যারা বাহ্যিক মেলারগুলি ব্যবহার করতে চান না এবং ডেডিকেটেড লিনাক্স সার্ভারে () মেল করতে চান তাদের জন্য।

উপায়, কীভাবে পিএইচপি মেলগুলি php.iniবিভাগে বর্ণিত হয়েছে[mail function]

পরামিতি sendmail-pathবর্ণনা করে যে কীভাবে সেন্ডমেল বলা হয়। ডিফল্ট মানটি হ'ল sendmail -t -i, তাই যদি আপনি sendmail -t -i < message.txtলিনাক্স কনসোলে কোনও কাজ পেয়ে থাকেন - আপনি সম্পন্ন হবেন। আপনি mail.logডিবাগ এ যুক্ত করতে পারেন এবং নিশ্চিত হন যে মেল () সত্যই ডাকা হয়েছে।

বিভিন্ন এমটিএ বাস্তবায়ন করতে পারে sendmail। তারা কেবল সেই নামে তাদের বাইনারিগুলির সাথে একটি প্রতীকী লিঙ্ক তৈরি করে। উদাহরণস্বরূপ, ডেবিয়ানে ডিফল্টটি পোস্টফিক্স । মেল প্রেরণের জন্য আপনার এমটিএ কনফিগার করুন এবং এর সাথে কনসোল থেকে এটি পরীক্ষা করুন sendmail -v -t -i < message.txt। ফাইল message.txtকে একটি বার্তা এবং একটি শরীরের সব হেডার থাকা উচিত, খাম জন্য গন্তব্য ঠিকানা থেকে নিয়ে যাওয়া হবে To:হেডার। উদাহরণ:

From: myapp@example.com
To: mymail@example.com
Subject: Test mail via sendmail.

Text body.

আমি এমটিএ হিসাবে এসএমএসটিপি ব্যবহার করতে পছন্দ করি কারণ এটি সহজ এবং খোলা পোর্টগুলির সাথে ডেমন চালানোর প্রয়োজন নেই। ssmtp কেবল লোকালহোস্ট থেকে মেল প্রেরণের জন্য ফিট করে । এটি কোনও পাবলিক মেল পরিষেবাতে আপনার অ্যাকাউন্টের মাধ্যমে প্রমাণীকৃত ইমেল প্রেরণ করতে পারে। এসএমএসটিপি ইনস্টল করুন এবং কনফিগারেশন ফাইল সম্পাদনা করুন /etc/ssmtp/ssmtp.conf। ইউনিক্স অ্যাকাউন্টে স্থানীয় সিস্টেমের মেল পেতে সক্ষম করতে (উদাহরণস্বরূপ ক্রোন জবস থেকে রুট করার সতর্কতা) কনফিগার করুন/etc/ssmtp/revaliases ফাইলটি করুন।

ইয়ানডেক্স মেলটিতে আমার অ্যাকাউন্টের জন্য আমার কনফিগারেশনটি এখানে রয়েছে:

root=mymail@example.com
mailhub=smtp.yandex.ru:465
FromLineOverride=YES
UseTLS=YES
AuthUser=abcde@yandex.ru
AuthPass=password

2

এটি কেবলমাত্র কয়েকজন মুষ্টিমেয় ব্যবহারকারীরাই প্রভাব ফেলবে, তবে আমি চাইছি এটি সেই ছোট মুষ্টিমেয়দের জন্য নথিভুক্ত। এই সামান্য মুষ্টিমেয় এই সদস্য এই সমস্যার কারণে একটি কর্মরত পিএইচপি মেল স্ক্রিপ্টের সমস্যা সমাধানের জন্য 6 ঘন্টা ব্যয় করেছেন।

আপনি যদি এমন কোন বিশ্ববিদ্যালয়ে যাচ্ছেন যা www.AceITLab.com থেকে এক্সএএমপিপি চালায়, আপনার প্রফেসর আমাদের কী বলেননি তা আপনার জানা উচিত: এসিএটিএলএল ফায়ারওয়াল (উইন্ডোজ ফায়ারওয়াল নয়) এক্সএএমপিপি-তে মার্কারিমেলকে ব্লক করে। আপনাকে একটি বিকল্প মেইল ​​ক্লায়েন্ট ব্যবহার করতে হবে, নাশপাতি আমাদের জন্য কাজ করছে। আপনাকে কম সুরক্ষা সেটিংস সহ একটি Gmail অ্যাকাউন্টে প্রেরণ করতে হবে।

হ্যাঁ, আমি জানি, এটি বাস্তব বিশ্বের ইমেলের জন্য সম্পূর্ণ অকেজো। যাইহোক, আমি যা দেখেছি তার থেকে একাডেমিক সেটিংস এবং বাস্তব বিশ্বের প্রায়শই অমূল্য মিল থাকে।


এটি খুব অদ্ভুতভাবে নির্দিষ্ট, এবং প্রকৃতপক্ষে অন্য কাউকে সহায়তা করবে। দয়া করে আপনার উত্তরের নীচে [মুছুন] লিঙ্কটি ব্যবহার করুন।
মারিও

এই প্রসঙ্গে "নাশপাতি" কী? আপনার অর্থ কি পিয়ার , পিএইচপি সফটওয়্যার সংগ্রহস্থল? অথবা অন্য কিছু? যেমন পিয়ার ?
পিটার মর্টেনসেন

আপনি কি সত্যিই "মূল্যবান ছোট" বলতে চাইছেন ? এটা কি কিছু করার ইচ্ছা আছে? কেন?
পিটার মর্টেনসেন

1

আপনি যদি কোনও স্থানীয় সার্ভারে এই কোডটি চালাচ্ছেন (যেমন উন্নয়নের উদ্দেশ্যে আপনার কম্পিউটার) এটি প্রাপকের কাছে ইমেল প্রেরণ করবে না। এটি .txtনামের একটি ফোল্ডারে একটি ফাইল তৈরি করবেmailoutput

ক্ষেত্রে যদি আপনি একটি নিখরচায় হোস্টিং পরিষেবা ব্যবহার করছেন, যেমন 000webhostবা hostinger, সেই পরিষেবা সরবরাহকারীরা অক্ষম করেmail() ইমেল স্পোফিং, স্প্যামিং ইত্যাদির অনিচ্ছাকৃত ব্যবহার রোধ ফাংশনটি দেয় তবে তারা এই বৈশিষ্ট্যটিকে সমর্থন করে কিনা তা দেখার জন্য আমি আপনাকে তাদের সাথে যোগাযোগ করতে পছন্দ করি।

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

পিএইচপি মেল ()

আপনার হোস্টিং পরিষেবা মেল () ফাংশন সমর্থন করে আবহাওয়া পরীক্ষা করতে, এই কোডটি চালানোর চেষ্টা করুন (প্রাপকের ইমেল ঠিকানাটি পরিবর্তন করতে ভুলবেন না) :

<?php
    $to      = 'nobody@example.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: webmaster@example.com' . "\r\n" .
        'Reply-To: webmaster@example.com' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

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

1

মেইল পাঠাও ডেবিয়ান 10.0.0 ( 'বাস্টার') জন্য ইনস্টলেশন আসলে তুচ্ছ ছিল!

php.ini

[mail function]
sendmail_path=/usr/sbin/sendmail -t -i
; (Other directives are mostly windows)

স্ট্যান্ডার্ড সেন্ডমেল প্যাকেজ ইনস্টল ('প্রেরণ' মঞ্জুরি দেয়):

su -                                        # Install as user 'root'
dpkg --list                                 # Is install necessary?
apt-get install sendmail sendmail-cf m4     # Note multiple package selection
sendmailconfig                              # Respond all 'Y' for new install

বিবিধ দরকারী কমান্ড:

which sendmail                              # /usr/sbin/sendmail
which sendmailconfig                        # /usr/sbin/sendmailconfig
man sendmail                                # Documentation
systemctl restart sendmail                  # As and when required

যাচাই (প্রেরণের ক্ষমতা)

echo "Subject: sendmail test" | sendmail -v <yourEmail>@gmail.com

উপরেরটি প্রায় 5 মিনিট সময় নেয়। তারপরে আমি 5 ঘন্টা নষ্ট করেছি ... আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করতে ভুলবেন না !


0

বিভিন্ন সম্ভাবনা রয়েছে:

  1. আপনি একটি সার্ভার সমস্যার সম্মুখীন হচ্ছেন। সার্ভারে কোনও মেল সার্ভার নেই। সুতরাং আপনার মেলটি কাজ করছে না, কারণ আপনার কোডটি ভাল এবং মেল প্রকারের সাথে কাজ করছে।

  2. আপনি পোস্ট করা মান পাচ্ছেন না। একটি স্ট্যাটিক মান সহ আপনার কোড চেষ্টা করুন।

  3. মেল প্রেরণের জন্য এসএমটিপি মেলগুলি ব্যবহার করুন ...


0

আপনি libmail ব্যবহার করতে পারেন: http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=en

include "libmail.php";
$m = new Mail(); // Create the mail
$m->From($_POST['form']);
$m->To($_POST['to']);
$m->Subject($_POST['subject']);
$m->Body($_POST['body']);
$m->Cc($_POST['cc']);
$m->Priority(4);
// Attach a file of type 'image/gif' to be displayed in the message if possible
$m->Attach("/home/leo/toto.gif", "image/gif", "inline");
$m->Send(); // Send the mail
echo "Mail was sent:"
echo $m->Get(); // Show the mail source

5
উল্লেখ করা গুরুত্বপূর্ণ: এটি নিছক একটি mail()ফাংশন আবরণ। কেবল বার্তা নির্মাণ এবং কিছু কল্পনা যুক্ত করে।
মারিও

0

আপনি নিজের ত্রুটিগুলি এটি দ্বারা দেখতে পারেন:

error_reporting(E_ALL);

এবং আমার নমুনা কোডটি হ'ল:

<?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'PHPMailer.php';
    require 'SMTP.php';
    require 'Exception.php';

    $name = $_POST['name'];
    $mailid = $_POST['mail'];
    $mail = new PHPMailer;
    $mail->IsSMTP();
    $mail->SMTPDebug = 0;                   // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';         // Specify main and backup server
    $mail->Port = 587;                      // Set the SMTP port
    $mail->SMTPAuth = true;                 // Enable SMTP authentication
    $mail->Username = 'someone@gmail.com';  // SMTP username
    $mail->Password = 'password';           // SMTP password
    $mail->SMTPSecure = 'tls';              // Enable encryption, 'ssl' also accepted

    $mail->From = 'someone@gmail.com';
    $mail->FromName = 'name';
    $mail->AddAddress($mailid, $name);       // Name is optional
    $mail->IsHTML(true);                     // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'Here is your message' ;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    if (!$mail->Send()) {
       echo 'Message could not be sent.';
       echo 'Mailer Error: ' . $mail->ErrorInfo;
       exit;
    }
    echo 'Message has been sent';
?>

1
SMTPDebug = 0সহায়ক নয়। বা GMail এর সাথে একটি সরল "পাসওয়ার্ড" কাজ করবে না। এই উত্তরটি এখানে খুব বেশি অবদান রাখে না।
মারিও

-2

আপনার সেন্ডমেল সিস্টেম কাজ করে তবে আপনার কোডটি অবশ্যই নীচে পরিবর্তন করতে হবে:

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    $header ="
Content-Type: text/html; charset=UTF-8\r\n
MIME-Version: 1.0\r\n
From: \"$name\" <$email>\r\n
Reply-To: no-reply@yoursite.com\r\n
X-Mailer: yoursite.com mailer\r\n
";

    $to = '"Contact" <contact@yoursite.com>'; 
    $subject = 'Customer Inquiry';
    $body =<<<EOB
<!DOCTYPE html>
<html>
    <body>
        $message
    </body>
</html>
EOB;

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $header) !== false) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        }
    }
?>

এটি আপনাকে এইচটিএমএল-ভিত্তিক ইমেলগুলি প্রেরণে সক্ষম করে।

উল্লেখযোগ্য আগ্রহ:

  1. আমরা একটি শিরোনাম মাল্টিলাইনের স্ট্রিং তৈরি করেছি (প্রতিটি লাইন \ r \ n দ্বারা পৃথক);
  2. আমরা এইচটিএমএল ফেরত প্রকাশ করার জন্য সামগ্রী-প্রকার যুক্ত করেছি যাতে আপনি আরও ভাল ইমেলগুলি রচনা করতে পারেন (আপনি নিজের ম্যাসেজে সিএসএস সহ নয়ে এইচটিএমএল কোড যুক্ত করতে পারেন, যেমন আপনি এইচটিএমএল পৃষ্ঠায় করেন)।

দ্রষ্টব্য: <<<EOBসিনট্যাক্সের জন্য শেষ ইওবি চিহ্নিতকারীটির শুরু পিএফ লাইন হিসাবে শুরু হয় এবং সেমিকোলনের পরে কোনও স্থান বা কোনও অক্ষর নেই।

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