Sending mail with Gmail’s SMTP server with fsockopen

Today i was trying to find a way to send mail from my localhost (xampp) with Gmails SMTP server. I found some code in popular and also fastest forum engine – punBB.

I got the codes and did some cleanup for working fine as an external script. Here is the codes -

<?php

//this functin processes the server return codes and generates errors if needed
function server_parse($socket, $expected_response)
{
	$server_response = '';
	while (substr($server_response, 3, 1) != ' ')
	{
		if (!($server_response = fgets($socket, 256)))
			echo 'Couldn\'t get mail server response codes. Please contact the forum administrator.', __FILE__, __LINE__;
	}

	if (!(substr($server_response, 0, 3) == $expected_response))
		echo 'Unable to send e-mail. Please contact the forum administrator with the following error message reported by the SMTP server: "'.$server_response.'"', __FILE__, __LINE__;
}


//
// This function was originally a part of the phpBB Group forum software phpBB2 (http://www.phpbb.com).
// They deserve all the credit for writing it. I made small modifications for it to suit PunBB and it's coding standards.
// -------> This message is from punBB developer
//
function smtp_mail($to, $subject, $message, $headers = '')
{
	$recipients = explode(',', $to);
	$user = '<your mail id>';
	$pass = '<your password>';
	$smtp_host = 'ssl://smtp.gmail.com';
	$smtp_port = 465;


	if (!($socket = fsockopen($smtp_host, $smtp_port, $errno, $errstr, 15)))
		echo "Could not connect to smtp host '$smtp_host' ($errno) ($errstr)", __FILE__, __LINE__;

	server_parse($socket, '220');

	fwrite($socket, 'EHLO '.$smtp_host."\r\n");
	server_parse($socket, '250');

	fwrite($socket, 'AUTH LOGIN'."\r\n");
	server_parse($socket, '334');

	fwrite($socket, base64_encode($user)."\r\n");
	server_parse($socket, '334');

	fwrite($socket, base64_encode($pass)."\r\n");
	server_parse($socket, '235');



	fwrite($socket, 'MAIL FROM: <example@gmail.com>'."\r\n");
	server_parse($socket, '250');

	foreach ($recipients as $email)
	{
		fwrite($socket, 'RCPT TO: <'.$email.'>'."\r\n");
		server_parse($socket, '250');
	}

	fwrite($socket, 'DATA'."\r\n");
	server_parse($socket, '354');

	fwrite($socket, 'Subject: '.$subject."\r\n".'To: <'.implode('>, <', $recipients).'>'."\r\n".$headers."\r\n\r\n".$message."\r\n");

	fwrite($socket, '.'."\r\n");
	server_parse($socket, '250');

	fwrite($socket, 'QUIT'."\r\n");
	fclose($socket);

	return true;
}

// Send the mail
if(smtp_mail('example@gmail.com', 'Hi! Test Mail', 'This is a test mail from xampp with fsockopen()'))
{
	echo "Mail sent";
}
else
{
	echo "Some error occured";
}
?>

উবুন্টুর মুশকিল আসানঃ উবুন্টুর সব ঝামেলার বাংলা সমাধান

প্রথমেই একটা কথা বলে নেই, এই লেখাটা একইসাথে বিজ্ঞাপনধর্মী এবং আবেদনধর্মী। আপনি যদি বিজ্ঞাপনকে অতিশয় ঘৃণা করেন তবে আমরা দুঃখিত এই বিজ্ঞাপন প্রচারের জন্য, তারপরও অনুরোধ করবো সামান্য সময় নষ্ট করে একটু কষ্ট করে পড়ুন। আর যদি বিজ্ঞাপনের ফ্যান হন তাহলেও আমরা দুঃখিত, কারন এইটা আমাদের লেখা জীবনের প্রথম বিজ্ঞাপন (জীবনের প্রথম আবিষ্কারে বিজ্ঞানী এডিসনও হোঁচট খেয়েছেন, আর আমরাতো গোনাতেই পড়িনা), তাই এই লেখায় আহামরি কিছু পাবেননা, তারপরও একই অনুরোধ করবো যে সামান্য সময় নষ্ট করে একটু কষ্ট করে পড়ুন। এখন আসুন কেন আমরা একে বিজ্ঞাপনধর্মী এবং আবেদনধর্মী বললাম। এই লেখাটা বিজ্ঞাপনধর্মী তাদের জন্য যারা “উবুন্টু” শব্দটার সাথে পরিচিত না। আর “আবেদনধর্মী” তাদের জন্য যারা “উবুন্টু ব্যবহারকারি”। আপনি যদি প্রথমভাগে পড়েন অর্থাৎ যদি আপনি একজন উবুন্টু ইউজার হন তবে ইচ্ছা করলে এই লেখাটার প্রথমভাগকে উপেক্ষা করে সরাসরি দ্বিতীয়ভাগে যেতে পারেন, তবে না যেতেই পরামর্শ দেব। আর যদি দ্বিতীয় ভাগে পড়েন অর্থাৎ উবুন্টু কি তা জানেননা তবে প্রথম ভাগটা অবশ্যই পড়বেন কিন্তু।

প্রথম ভাগঃ
উবুন্টু হচ্ছে বর্তমান বিশ্বের সবচেয়ে জনপ্রিয় একটা লিনাক্স ডিস্ট্র। লিনাক্স নিয়ে আমাদের সবারই একটা ভুল ধারনা যে এটি অতি কঠিন জিনিস। অস্বীকার করবনা, এককালে এটা অপারেট করা আমার আপনার মত সাধারন মানুষের কম্ম ছিলনা, কিন্তু এখন দিন পাল্টেছে। লিনাক্সকে ভিত্তি করে গড়ে উঠা উবুন্টু নামের এই অপারেটিং সিস্টেমটি লিনাক্সের কঠিন ভাবমূর্তিকে একেবারে দূর করে দিয়ে সাধারনের ব্যবহারের উপযোগী করে ফেলেছে। এটি দিয়ে অফিসের (লেখালেখি, হিসেবনিকেশ, প্রেজেনটেশন) কাজ কর্ম, গান শোনা, ভিডিও দেখা, গেম খেলা, ইন্টারনেট ব্রাউজ করা, আঁকাআঁকি করা – সবই করতে পারবেন। বোনাস হিসেবে পাবেন ভাইরাস, স্পাইওয়ার, এডওয়ার ইত্যাদি হাবিজাবি মেজাজ খারাপ করা জিনিস থেকে মুক্ত থাকার আনন্দ! সবচেয়ে বড় কথা হল, এই উবুন্টু একেবারে ফ্রি। এইবার একটু আঁতলামি কথাবার্তা, কিন্তু কথাবার্তাগুলো চিন্তার বিষয়। আমরা যেসব সফটওয়ার ব্যবহার করি বাংলাদেশে সেগুলোকে ইংলিশে বলা হয় “পাইরেটেড সিডি” বা বাংলায় যেটাকে বলা হয় “চোরাই সিডি”। সোজা কথায় আমরা চুরি করা জিনিস ব্যবহার করছি। অন্যদিকে উবুন্টু হচ্ছে একদমই মাগনা এবং সেটা বৈধভাবেই। তাই এটা ব্যবহার করলে কেউ আমাকে চোরও বলবেনা। তাছাড়া উবুন্টু হচ্ছে লিনাক্সবেজড অপারেটিং সিস্টেম অর্থাৎ যে স্ট্যাবিলিটি আর পার্ফরম্যান্সের জন্য লিনাক্স আজ বিশ্বের সিংহভাগ সুপার কম্পিউটার আর সার্ভারে ব্যবহার করা হয় সেই স্ট্যাবিলিটি আর পার্ফরম্যান্সকে পাচ্ছেন আপনার ডেস্কটপে। সত্যিকারের এক অপারেটিং সিস্টেম হচ্ছে উবুন্টু।

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

দ্বিতীয় ভাগঃ

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

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

তাহলে আর কথা বাড়াচ্ছিনা। ব্লগটার একটা ফাইনাল এ্যাড দিয়ে শেষ করছি এই লেখাটা। উবুন্টুর মুশকিল আসান ব্লগে আপনার সাথে দেখা হচ্ছে তাহলে!

ফাইনাল এ্যাডঃ
আপনি উবুন্টুকে জানতে চান?
উবুন্টুতে আসতে চাচ্ছেন কিন্তু ভয়ে আসতে পারছেন না?
আপনি উবুন্টুতে সমস্যায় পড়েছেন?
আপনার উবুন্টু সম্পর্কিত জ্ঞান কারো সাথে শেয়ার করতে পারছেন না?
তাহলে আপনার জন্যই রয়েছে “উবুন্টুর মুশকিল আসান”।
এটি সম্পুর্ন রঙ্গীন এবং বাংলা ভাষায় ইউনিকোড সমর্থিত উবুন্টু বিষয়ক ব্লগ!
আপনি আসুন। আপনার বন্ধুদেরও আসতে বলুন।

লিখেছেনঃ অভ্রনীল