www.3manage.com
لایسنس آنتی ویروس

تابع Mail در PHP

تابع Mail در PHP

در این مقاله ما خواهیم دید که چگونه زبان PHP را برای ارسال ایمیل تنظیم کنیم و همچنین نحوه فرستادن ایمیلهای HTML و ایمیلهای همراه با فایل ضمیمه (Attachment) را بررسی کرد .

قبل از اینکه به کمک PHP بتوانیم ایمیل بفرستیم باید PHP را برای این کار تنظیم کنیم . دقیقا مانند اینکه بخواهیم برنامه ارسال و درایمیل ( مانند Outlook ) را تنظیم کنیم .

برای این کار هم باید سراغ فایل php.ini رفته و آن را با editor دلخواه خودتان باز کنید . اگر می خواهید کدهای خودتان را بر روی سروری غیر از سیستم خودتان اجرا گنید از این مزحله صرف نطر کنید و فرض را بر این بگزارید که سرور شما برای انجام این کار تنظیم شده است و در نتیجه به مرحله بعد بروید .

در فایل php.ini در قسمتی که با ( mail function ) عنوان گزاری شده است گزینه ای دارید به نام SMTP که باید مقدار آن را SMTP ایمیلتان بگذارید مثلا mail.softhome.net

البته در فایل php.ini تنظیمات برای سرورهای ویندوز و لینوکس را جدا در نظر گرفته و شما باید بر اساس سیستمی که استفاده میکنید چیزی شبیه زیر را داشته باشید :

برای سیستمهای ویندوز :

[mail function ]

Setup for windows system ;

SMTP = smtp.my.isp.net

Sendmail_from = me@myserver.com

و برای سیستمهای لینوکس :

 

[mail function ]

Setup for Linux system;

Sendmail_path = /usr/sbin/sendmail-t

Sendmail_from = me@myserver.com

وقتی تنظیمات را انجام دادید وب سرور خود را restart کنید و اکنون همه چیز برای ارسال ایمیل آماده است !

ارسال ایمیل ساده (Plain Email ) :

حقیقتا از روشی که PHP برای ازسال ایمیل در مظر گرفته ساده تر نمی توان تصور کرد !

در حقیقت شما می توانید ارسال ایمیل را با تنها نوشتن یک خط انجام دهید ! مانند زیر :

Mail(‘recipient @some.net’,’subject’,Your message here.’);

خط بالا یک ایمیل را به آدرس ‘recipient@some.net’ با موضوع ‘subject’ و Your message here.’, به عنوان متن نامه ارسال می کند .

همانطور که مشاهده کردید PHP ارسال ایمیل را بسیار ساده کرده است . ولی چندین راه حل پیشرفته و جود دارد که به ما این امکان را می دهد که ایمیلهای HTML و ایمیلهای همراه با فایل ضمیمه بفرستیم .

قبل از هر چیز این نکته را متذکر شوم که اگر mail system ی که شما در php.ini تعریف کرده اید ایمیل ارسالی را برگشت (reject) دهد { برای مثال اگر در قسمت TO آدرس یک ایمیل درست را ننوشته باشیم } این تابع یک پبغام خطا در مرورگر کاربر نمایش خواهد داد ، دقیقا مانند اتفاقی که در مورد سایر تابعهای PHP می افتد .

اما هماتطور که می دانید ما می توانیم با نوشتن علامت @ قبل از تابع از نوشتن پیغام خطا در مرورگر کاربر جلوگیری کنیم .

اگر این نکته را با چیزی که تابع mail برمی گرداند ( true یا false بسته به اینکه ایمیل ارسال شده باشد یا خیر ) ترکیب کنیم کد زیر را خواهیم داشت :

If @mail($to,$subject, $message )) {

echo(‘<p>Mail sent successfully .</p>’);

} else {

echo(‘<p>Mail sent successfully .</p>’);

}

به یاد داشته باشید که ارسال ایمیل نمی تواند تضمینی بر دریافت آن در مقصد باشد.

برای مثال اگر یک ایمیل به آدرس nonexistent.user@hotmail.com بفرستیم و فرض بر این باشد که این آدرس اصلا وجود ندارد ، این آدرس برای تابع mail قابل قبول است و true را برمی گرداند ولی مطمئنا این ایمیل از بین می رود چون کسی صاحب آن نیست ، پس در این مورد کاری از دست PHP بر نمی آید . وقتی که می خواهیم یک ایمیل را به چندین آدرس بفرستیم کافیست که در پارامتر اول تمام آدرس ها را پشت سر هم نوشته و آنها را با علامت کاما “،” از هم جدا کنیم . برای مثال :

mail(‘recipient 1 @some.net,recipient2@some.net’,

‘An email to two people ‘ , ‘message goes here , ‘ );

خب ، تا حالا اصول قرستادن یک ایمیل را بررسی کردیم ، اما بپردازیم به اصل مطلب و mail header ها و اینکه چه کارهایی می توانیم با آنها انجام دهیم !

ایمیلهای HTML و header ها :

اکنون شما می توانید از اسکریپتهای PHP خود ایمیل بفرستید ، چقدر جالب ! من مطمئنم وقتی یاد بگیرید که چگونه ایمیلهای HTML بفرستید احساس قدرت بیشتری خواهید کرد !

پس ادامه می دهیم ؛

برای اینکه ایمیلهای HTML را درک کنید ابتدا باید header های یک ایمیل را بشناسید .

هر ایمیل دریافتی از دو قسمت تشکیل شده است : header ها و متن نامه (message body) . در زیر نمونه یک ایمیل ساده که برنامه ایمیل شما دریافت کرده است را می بینیم :

Return-path :<sender@elsewhere.com >

Delivered-To:you@some.net

Received:…several lines like this …

From : Sender <sender@elsewhrer.com>

To: YOU <you @some.net>

Subject: A Simple Message

Date: Mon, 11 Feb 2002 16:08:19 -0500

Organization : Sender’s Company

X-Mailer : Microsoft Outlook , Build 10.02616

 

Hi there ! <tap> <tap> Is this thing on ?

تمام خطوط بالای خط سفید header ها هستند . در واقع یک ایمیل می تواند بیشتر از اینها هم header داشته باشد ولی برای اختصار در این مثال چند مورد اصلی را ذکر کرده ام .

همانطور که می بینید هر خط از header های با نام آن header شروع می شود (From To :, Subject :, date :, stc) و در ادامه آنها هم چند مقدار (value) قرار گرفته است . بیشتر header ها استاندارد شده هستند و یک مفهوم خاص برای mail program یا mail server ی که مسئول رساندن ایمیل ها به ما هستند ، دارند . اما header های غیر استاندارد هم وجود دارند و مشخصه آنها این است که با –X شروع شوند ( مانند : X-Mailer که اغلب برای نشان دادن برنامه ای که برای ارسال ایمیل استفاده شده است به کار می رود )

نکته : اگر مقدار (value) یک  header نیاز به بیش از یک خط اضافه باید با یک فاصله از سر خط شروع شوند . یک مثال در این زمینه را در قسمت بعد خواهیم دید .

وقتی که برنامه ایمیل شما به خط سفید (balnk line ) رسید می فهمد که header های نامه تمام شده و از این به بعد محتویات متن نامه است که باید نشان داده شود . در مثال ما ،‌ متن نامه همان خط آخر است .

تابع mail در PHP به شما اجازه می دهد که header های مورد نظر خودتان را به نامه اضافه کنید و PHP آنها را به header هایی که خود به صورت اتوماتیک تولید می کند اضافه می کند . برای نمونه در مثال پایین یک header با عنوان

X-mailer: به نامه اضافه کرده ایم که PHP 4.x را به عنوان برنامه فرستنده ایمیل معرفی می کند .

Mail(‘recipient@some.net’,’subject’,Your message here.’,

‘X-mailer: PHP 4.x’);

پرامتر چهارم که یک پرامتر اختیاری است اغلب برای نشان دادن From ایمیل استفاده می شود ( علاوه بر From ی به صورت پیش فرض در php.ini تعریف کرده ایم ) . پس اجازه بدهید که یک header از نوع From به نامه اضافه کنیم تا این کار را برای ما انجام دهد :‌

Mail(‘recipient@some.net’,’subject’,Your message here.’,

“From: sender@some.net\nX-mailer: PHP 4.x”);

با توجه به اینکه header ها هر کدام در یک خط باید قرار داشته باشند پس ما باید هر دو خط را با \n از هم جدا کنیم ( که این خود نشان دهنده این است که ما باید پارامتر چهارم را درون ” ” قرار دهیم برای اینکه PHP به کاراکترهای خاص نظیر \n اگردرون ، ، قرار داشته باشند توجه نمی کند ).

Header های دیگری هم هستند که نام فرستنده و گیرنده نامه را قبل از آدرس ایمیل آنها می نویسد ؛ به این صورت : name <email>.

مثال :

Mail(‘recipient@some.net’,’subject’,Your message here.’,

“To: The Receiver < recipient@some.net>\n”.

“From : The sender <sender@some.net>\n”.

“X-Mailer:PHP 4.x”);

توجه داشته باشید که برای اضافه کردن نام به قسمت TO ، نمی توانیم نام را در پارامتر اول جا دهیم و تنها راه ممکن این است که یک header با عنوان TO : به header ها اضافه کنیم .

Header های CC: و Bcc: هم وجود دارند که مورد استفاده آنها حتما خودتان می دانید :

Mail(‘recipient@some.net, someone@some.net, metoo@some.net’,

‘Subject’, ‘Your message here.’,

“To: The Receiver <recipient@some.net>\n” .

“From: The sender <sender@some.net>n” .

“cc: Interested <someone@some.net>\n” .

“Bcc: Me Too <metoo@some.net>\n”.

“X-mailer: PHP 4.x”);

فقط توجه داشته باشید که آدرس ایمیل تمام گیرنده ها به ترتیب To و cc و Bcc در پارامتر اول نوشته شده است ، این نکته در جایی ذکر نشده است ولی من با تکیه بر تجربیات شخصی خودم به این نکته پی بردم ام که اگر می خواهید ایمیل به تمام گیرنده ها برسد باید این کار را بکنید (مخصوصا در سرورهای ویندوز که زیادی حساس هستند .)

اخطار باگ :

دو باگ برای تابع mail در PHP وجود دارد که من اخیرا در PHP نسخه ۴،۱،۰ دیده ام ؛ اول اینکه هدر Cc : باید اینگونه تایپ شود : :cc یا :CC یعنی هر دو حروف بزرگ یا هر دو کوچک … ترکیبی از حروف کوچک و بزرگ قاعد تا باید کار کند ولی اینطور نیست !

دوم اینکه در سروهای ویندوز هدر :Bcc درست کار نمی کند . همانطور که می دانید هنگام ارسال نامه ، هدر :Bcc باید از بین header ها حذف شود ، ولی اینگونه ایمیل می تواند هدر :Bcc را در بین هدرها ببیند !

خب حتما سوال می کنید که این همه چه ربطی به فرستادن ایمیل های HTML داشت ؟‌

جواب : چند header خاص هستند که باعث می شوند برنامه دریافت کننده ایمیل آن را به عنوان ایمیل HTML بشناسند .

mail(‘recipient@some.net’,’subject’,

‘<html><body><p>Your <i>message</i>here.</p></body></html>’,

“To: The Receiver <recipient@some.net>\n”

“From : The Sender <sender@some.net>\n”.

“MIME-Version : 1.0 \n”.

“Content-type: text/html: charset=iso-8859-1”);

مطالب مرتبط

دانلود تحقیق  سیستم عامل های موبایل
دانلود تحقیق تحلیل سیستم واحد توزیع واحد تولیدی
دانلود تحقیق بررسی اثربخشی داستان گویی در فرآیند یادگیری با تکیه بر درس ریاضی پایه هفتم
دانلود تحقیق تجارت الکترونیک در صنعت نفت و گاز‎
دانلود تحقیق پیام رسانی امن خودرو به خودرو و امنیت ارتباطات در VANET
دانلود تحقیق بررسی مسائل امنیتی در مدل های خدمات در رایانش ابری‎
دانلود تحقیق مبانی تجارت الکترونیک‎
دانلود تحقیق داده کاوی و کاربرد آن در تشخیص بیماری ها ( دیابت )

یک نظر بگذارید

دسته‌ها

اين سايت را حمايت مي کنم