نقطه ویرگول;

هر از گاهی از هر چیزی

هر از گاهی از هر چیزی

آموزش ساده ارسال ایمیل با PHP

شنبه, ۲۳ بهمن ۱۳۸۹، ۰۷:۲۳ ب.ظ


فرستادن ایمیل تقریباً یک کار روزمره (شاید ساعتمره یا دقیقهمره!) برای سایت هایی ست که کاربران بسیاری دارند می باشد. ارسال ایمیل با php بسیار آسان است. کلاس ها و توابع فراوانی برای این کار وجود دارند. در این آموزش با روش هایی برای ارسال ایمیل آشنا می شوید. همان طور که می دانید ایمیل ها اقسام مختلفی دارند. ایمیل می تواند شامل فایل ضمیمه، تصاویر درونی، فرمت دوتایی(HTML/text) و غیره باشد.

ما با یک ایمیل ساده شروع می کنیم. این ایمیل از تابع ابتدایی ()mail استفاده می کند.

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

 
 date_default_timezone_set("Asia/Tehran");
$to = "info@phpdevelopers.ir";
$subject = "Test Text Email Only";
$headers = "From: me@mysite.comrnX-Mailer: Custom PHP Script";
$body = "Hi.nnHello World!nnRegards,nnWiwit.";
mail($to, $subject, $body, $headers);
?>

حال این کد را تشریح می کنیم:

 date_default_timezone_set("Asia/Tehran");
 

1) در اینجا زمان را بر حسب منطقه جغرافیایی را مشخص کردیم. Asia/Tehran منطقه جغرافیایی ایران را مشخص می کند که در ساعت 3:30+ واقع است.

 $to = "info@phpdevelopers.ir";
 

2) از متغیری دلخواه مانند to$ برای نگهداری آدرس ایمیل مقصد استفاده می کنیم.

 $subject = "Test Text Email Only";
 

3) از متغیری دلخواه مانند subject$ برای نگهداری عنوان ایمیل استفاده می کنیم.

 $headers = "From: me@mysite.comrnX-Mailer: Custom PHP Script";
 

4) در اینجا هدری که می خواهیم ارسال شود را تعیین می کنیم. آدرس فرستنده از جمله مواردی است که می توانیم در این هدر استفاده کنیم.

پارامترهای هدر ارسالی با rn از یکدیگر جدا می شوند.

 $body = "Hi.nnHello World!nnRegards,nnWiwit.";
 

5) متن ایمیل را در اینجا قرار می دهیم. همان طور که می دانید n برای ایجاد خط جدید است که در رشته های متنی(text) استفاده می شود.

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

6) در نهایت موارد لازم را در تابع mail قرار می دهیم. هم اکنون ایمیل ارسال شد!

در مرحله بعدی می خواهیم یک ایمیل html ارسال کنیم. شاید تا کنون با یک ایمیل تبلیغاتی برخورد کرده باشید. اکثر این ایمیل ها شامل کدهای html هستند. آن ها چیدمان زیبایی دارند و حاوی جدول ها، رنگ های زیبای نوشته و غیره هستند. آن ها تنها بدنه ایمیل ارسالی را تغییر داده و کدهای html را وارد آن کرده اند و همچنین یک هدر Content-type: text/html به آن اضافه کرده اند.
به مثال زیر نگاه کنید:

date_default_timezone_set('Asia/Tehran');
$to = "info@phpdevelopers.ir";
$to .= ", " . "soheil@phpdevelopers.ir";
$subject = "Test for HTML Format";
$headers = "MIME-Version: 1.0rn";
$headers .= "Content-type: text/html; charset=utf-8rn";
$headers .= "To: Information Department ,
Soheil Novinfard rn";
$headers .= "From: Me rn";
$headers .= "Cc: rasouli@phpdevelopers.irrn";
$headers .= "Bcc: hamid@phpdevelopers.irrn";
$body = "


ایمیل آزمایشی


سلام این ایمیل آزمایشی است.


";
mail($to, $subject, $body, $headers);
?>
حال کدهای جدید را بررسی می کنیم:
$to .= ", " . "soheil@phpdevelopers.ir";
1) به قسمت دریافت کننده های اصلی این ایمیل، یک پست الکترونیکی جدید را اضافه کرده ایم. در رشته ی to حتما باید کاراکتر کاما(،) به رشته موجود اضافه شود و در میان ایمیل های دریافت کننده، قرار گیرد.
در PHP از نقطه(.) برای الحاق رشته ها، استفاده می شود.
$headers = "MIME-Version: 1.0rn";
2) در چند کد جدید بعدی هدر های جدیدی به ایمیل اضافه شده است. در اینجا نسخه MIME برای ایمیل ارسالی، تعریف شده است.
$headers .= "Content-type: text/html; charset=utf-8rn";
3) در این هدر ارسالی، نوع ایمیل از نوع html انتخاب شده و اینکودینگ کارکتری آن را از نوع utf-8 انتخاب کرده ایم.
استفاده از اینکودینگ utf-8 برای نمایش صحیح زبان فارسی در ایمیل، الزامی است.
$headers .= "To: Information Department ,
Soheil Novinfard rn";
4) در این هدر، برای دریافت کنندگان ایمیل، نام انتخاب می شود.
$headers .= "Cc: rasouli@phpdevelopers.irrn";
$headers .= "Bcc: hamid@phpdevelopers.irrn";
5) دریافت کنندگان نوع Cc و Bcc نامه مورد نظر ما، در این قسمت هدر مشخص می شوند.


ایمیل آزمایشی


سلام این ایمیل آزمایشی است.

6) در اینجا بدنه ی ایمیل ارسالی از متن به کدهای html تغییر یافته است.
آموزش ما در اینجا به پایان می رسد.

نظرات  (۲۳)

۲۴ بهمن ۸۹ ، ۱۴:۳۸ عبدالماجد
عالی بود .
آقا دم شما گرم
خیلی کارتون درسته
عالی بود....
۲۶ بهمن ۸۹ ، ۱۵:۳۶ احمد شعبانی
سلام. وقتتون بخیر.
من چطور میتونم از این کد در وبسایتم استفاده کنم؟
من یک صفحه با PHP نوشتم که می خوام در اون یک ایمیل به کاربر بفرستم
(وقتی کاربر سفارشش کامل میشه، یک ایمیل واسش بفرستم)
از این کدی که شما قرار دادید چطور میتونم استفاده کنم؟!
با تشکر-شعبانی
۲۶ بهمن ۸۹ ، ۲۰:۰۱ سهیل نوین فرد
با سلام،
بسیار واضح است، شما در صفحه ای که فرم ثبت نام شما برای پردازش به آن ارسال می شود، به یکی از دو صورت بالا (متنی یا html) ایمیل را ارسال می کنید. شما باید تنها در متغیر to آدرس ایمیل ارسالی از صفحه قبل را وارد کنید و متن دلخواه خود را جایگزین کنید.
پیروز باشید
البته خوب باید نتظیمات مربوط به smtp رو هم ست کنند
۲۶ بهمن ۸۹ ، ۲۰:۲۲ سهیل نوین فرد
با سلام،
منظورتان این است که نتظیمات مربوط به smtp در کد اسکریپت اجرایی باید تنظیم شود؟
۲۶ بهمن ۸۹ ، ۲۲:۴۲ احمد شعبانی
سهیل جان ممنون. آره من تغییراتی که شما گفتی رو اعمال کردم اما ایمیلی ارسال نمیشه.
نکته ای که هیچ اطلاعی ازش ندارم همین مورد smtp هست که جناب مدیر فرمودند.
میشه لطفاً در این مورد بیشتر توضیح بدید و طرز ست کردن رو بفرمایید.
ارادتمند-شعبانی
۲۶ بهمن ۸۹ ، ۲۳:۳۰ احمد شعبانی
راستی در مورد سایتم باید بگم که من از پرتال دیتالایف استفاده کردم: http://www.forghaniprint.com/
و برای گرفتن سفارش از یک فرم php استفاده کردم: http://www.forghaniprint.com/sendOrder.php
(این سایت رو به عنوان پروژه درس کارآفرینی و همچنین پروژه پایانیم راه اندازی کردم.)
در این صفحه وقتی سفارش با موفقیت ثبت میشه میخوام به کاربر یه ایمیل مبنی بر همین موضوع بدم!
در مورد ست کردن smtp تو اینترنت سرچ کردم و یه چیزهایی در مورد php.ini دیدم اما نتونستم این فایل رو روی سیستم خودم و روی هاستم پیدا کنم.
با تشکر از اظهار لطفتون...
۲۶ بهمن ۸۹ ، ۲۳:۴۹ سهیل نوین فرد
شما احتمالا ایمیل رو از روی لوکال ارسال نکردید؟
به نظرم تنظیم SMTP ضروری نیست، من این مورد رو بررسی کردم.
بازم نظر دوستان رو دنبال می کنم ...
توی بعضی از سرورهای ویندوزی ممکنه تنظیمات ست نشده باشه
اما توی سرور های لینوکسی بدون ست کردن تنظیمات smtp می تونید ایمیل ارسال کنید (با استفاده از تابع mail)
۰۲ اسفند ۸۹ ، ۱۳:۳۲ احمد شعبانی
سلام دوستان
من این کد رو استفاده کردم:
 $to = "shabani.eng@gmail.com";
$subject = "Hi!";
$body = "Hi,nn How are you?";
$header = "From: info@forghaniprint.com";
if (mail($to, $subject, $body, $header))
{
echo("Message successfully sent!");
}
else
{
echo("Message delivery failed...");
}
وقتی سفارش تکمیل میشه فقط این پیغام ظاهر میشه:
Message successfully sent!
اما هیچ ایمیلی برام ارسال نمیشه!
ممنون میشم کمک کنید.
سلام ، ضمیمه کردن فایل attach منظورتونه؟ توضیح که ندادید چه جوریه؟؟؟
۰۳ اسفند ۸۹ ، ۰۱:۳۹ سهیل نوین فرد
در این آموزش تنها دو نوع متنی و Html توضیح داده شده است. ارسال فایل ضمیمه و ارسال همگانی در آینده توضیح داده می شود.
۰۳ اسفند ۸۹ ، ۰۱:۵۳ سهیل نوین فرد
با سلام،
با توجه به دقت نظر شما، من یک بار دیگر این کد رو بر روی سرور خودم تست کردم و ارسال شد!
حتی همین کد بالا را به خود شما هم ارسال کردم، ایمیل خودتون رو چک کنید.
اگر مشکل باز هم حل نشد با مسئولان هاست و سرور خود تماس حاصل فرمایید.
پیروز باشید
۱۳ مرداد ۹۰ ، ۲۱:۱۲ اراسال ایمیل با php | گــــوگــــــل
[...] اینم آموزشش آموزش ساده ارسال ایمیل با PHP | PHPDevelopers.ir [...]
سلام . من وقتی می خواهم ایمیل ارسال کنم با این خطا روبرو می شم.
Warning: mail() [function.mail]: SMTP server response: 530 5.7.0 Must issue a STARTTLS command first
مشکل کار کجاست ؟
سلام من هم همچین مشکلی رو که آقای adel گفتن دارم. مشکل کجاست؟
asd
سلام. من یه فرم ثبت نام طراحی کرده ام که حاوی فیلدهایی مثل "نام" - "تلفن" - "ایمیل" - "ادرس" - "شماره حساب" و... هست. توی موتور ارسال کنند این خط کدها را قرار داده ام:
$to = 'MY EMAIL';
$from = 'NAME';
$message = $_REQUEST['content'];
$subject = 'SUBJECT';
$header = "From: " ."rn";
$send = @mail($to, $subject, $message, $header);
if(!$send){
die();
}
?>
بدین ترتیب ایمیل ارسال میشه ولی فقط اطلاعات فیلدی که با نام content هست رو ارسال می کنه! هرکاری هم کردم اطلاعات فیلدهای دیگه رو ارسال نمی کنه! میشه راهنمائیم کنید چجوری و در کجای این کدها باید نام فیلدهای دیگه رو به بدنه ی ایمیل اضافه کنم!؟
فیلدهام:
Name: نام و نام خانوادگی
Phone: تلفن
Address: آدرس
accoun: شماره حساب
content: پیغام
اگر هم کسی لطف کنه بگه چجوری میشه اطلاعات این فیلدها رو بصورت جدول و منظم ایمیل کنم ممنون میشم.
یعنی مثلا ی جدول واسم ایمیل بشه که اطلاعات فیلدها منظم داخلش قرار بگیره!
یکدنیا ممنونم. خیلی از کدنویسی سردرنمیارم. ممنون میشم کدش رو بهم بگید.
مرسیییییییییییییییییییییییی
۲۴ مهر ۹۰ ، ۲۳:۰۰ رضا صداقه مسکن
با سلام
دوستان تابع mail زیاد نیازی به تنظیمات smtp نداره، بعضی از دوستان که فرمودن ایملی ارسال نمیشه دلیلش شاید بخاطر این باشه که تابع mail در extension های php هاست شما فعال نباشه که بایستی توسط مدیر سرور این گزینه در php.ini تنظیم شود.
یک سوالی هم داشتم اینه که از دوستان آیا میدونن چیکار میشه کرد که ایمیل ارسال شده با این تابع بصورت spam در میل باکس قرار نگیره؟؟
ممنون
مرسی
salam,khoobin?
kheili mamnoon az zahamati ke mikeshin
man mikham ye axe tablighatiro baraye tedade ziadi email ersal konam che tor bayad in kar ro anjam bedam,momkene rahnamaee konin?
mamnoon misham
۲۷ دی ۹۰ ، ۲۰:۳۳ amirsalartavakoli
بسیار عالی بود خیلی

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی