فرستادن ایمیل تقریباً یک کار روزمره (شاید ساعتمره یا دقیقهمره!) برای سایت هایی ست که کاربران بسیاری دارند می باشد. ارسال ایمیل با php بسیار آسان است. کلاس ها و توابع فراوانی برای این کار وجود دارند. در این آموزش با روش هایی برای ارسال ایمیل آشنا می شوید. همان طور که می دانید ایمیل ها اقسام مختلفی دارند. ایمیل می تواند شامل فایل ضمیمه، تصاویر درونی، فرمت دوتایی(HTML/text) و غیره باشد.
ما با یک ایمیل ساده شروع می کنیم. این ایمیل از تابع ابتدایی ()mail استفاده می کند.
برای این کار از کد زیر استفاده می کنیم:
حال این کد را تشریح می کنیم:
date_default_timezone_set("Asia/Tehran");
1) در اینجا زمان را بر حسب منطقه جغرافیایی را مشخص کردیم. Asia/Tehran منطقه جغرافیایی ایران را مشخص می کند که در ساعت ۳:۳۰+ واقع است.
$to = "[email protected]";
2) از متغیری دلخواه مانند to$ برای نگهداری آدرس ایمیل مقصد استفاده می کنیم.
$subject = "Test Text Email Only";
3) از متغیری دلخواه مانند subject$ برای نگهداری عنوان ایمیل استفاده می کنیم.
$headers = "From: [email protected]: 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 به آن اضافه کرده اند.
به مثال زیر نگاه کنید:
, Soheil Novinfardrn"; $headers .= "From: Me rn"; $headers .= "Cc: [email protected]"; $headers .= "Bcc: [email protected]"; $body = " ایمیل آزمایشی سلام این ایمیل آزمایشی است. "; mail($to, $subject, $body, $headers); ?>
حال کدهای جدید را بررسی می کنیم:
$to .= ", " . "[email protected]";
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: [email protected]"; $headers .= "Bcc: [email protected]";
5) دریافت کنندگان نوع Cc و Bcc نامه مورد نظر ما، در این قسمت هدر مشخص می شوند.
ایمیل آزمایشی سلام این ایمیل آزمایشی است.
6) در اینجا بدنه ی ایمیل ارسالی از متن به کدهای html تغییر یافته است.
آموزش ما در اینجا به پایان می رسد.
عالی بود .
آقا دم شما گرم
خیلی کارتون درسته
عالی بود….
سلام. وقتتون بخیر.
من چطور میتونم از این کد در وبسایتم استفاده کنم؟
من یک صفحه با PHP نوشتم که می خوام در اون یک ایمیل به کاربر بفرستم
(وقتی کاربر سفارشش کامل میشه، یک ایمیل واسش بفرستم)
از این کدی که شما قرار دادید چطور میتونم استفاده کنم؟!
با تشکر-شعبانی
با سلام،
بسیار واضح است، شما در صفحه ای که فرم ثبت نام شما برای پردازش به آن ارسال می شود، به یکی از دو صورت بالا (متنی یا html) ایمیل را ارسال می کنید. شما باید تنها در متغیر to آدرس ایمیل ارسالی از صفحه قبل را وارد کنید و متن دلخواه خود را جایگزین کنید.
پیروز باشید
البته خوب باید نتظیمات مربوط به smtp رو هم ست کنند
با سلام،
منظورتان این است که نتظیمات مربوط به smtp در کد اسکریپت اجرایی باید تنظیم شود؟
سهیل جان ممنون. آره من تغییراتی که شما گفتی رو اعمال کردم اما ایمیلی ارسال نمیشه.
نکته ای که هیچ اطلاعی ازش ندارم همین مورد smtp هست که جناب مدیر فرمودند.
میشه لطفاً در این مورد بیشتر توضیح بدید و طرز ست کردن رو بفرمایید.
ارادتمند-شعبانی
شما احتمالا ایمیل رو از روی لوکال ارسال نکردید؟
به نظرم تنظیم SMTP ضروری نیست، من این مورد رو بررسی کردم.
بازم نظر دوستان رو دنبال می کنم …
راستی در مورد سایتم باید بگم که من از پرتال دیتالایف استفاده کردم: http://www.forghaniprint.com/
و برای گرفتن سفارش از یک فرم php استفاده کردم: http://www.forghaniprint.com/sendOrder.php
(این سایت رو به عنوان پروژه درس کارآفرینی و همچنین پروژه پایانیم راه اندازی کردم.)
در این صفحه وقتی سفارش با موفقیت ثبت میشه میخوام به کاربر یه ایمیل مبنی بر همین موضوع بدم!
در مورد ست کردن smtp تو اینترنت سرچ کردم و یه چیزهایی در مورد php.ini دیدم اما نتونستم این فایل رو روی سیستم خودم و روی هاستم پیدا کنم.
با تشکر از اظهار لطفتون…
توی بعضی از سرورهای ویندوزی ممکنه تنظیمات ست نشده باشه
اما توی سرور های لینوکسی بدون ست کردن تنظیمات smtp می تونید ایمیل ارسال کنید (با استفاده از تابع mail)
سلام دوستان
من این کد رو استفاده کردم:
وقتی سفارش تکمیل میشه فقط این پیغام ظاهر میشه:
Message successfully sent!
اما هیچ ایمیلی برام ارسال نمیشه!
ممنون میشم کمک کنید.
با سلام،
با توجه به دقت نظر شما، من یک بار دیگر این کد رو بر روی سرور خودم تست کردم و ارسال شد!
حتی همین کد بالا را به خود شما هم ارسال کردم، ایمیل خودتون رو چک کنید.
اگر مشکل باز هم حل نشد با مسئولان هاست و سرور خود تماس حاصل فرمایید.
پیروز باشید
سلام ، ضمیمه کردن فایل attach منظورتونه؟ توضیح که ندادید چه جوریه؟؟؟
در این آموزش تنها دو نوع متنی و Html توضیح داده شده است. ارسال فایل ضمیمه و ارسال همگانی در آینده توضیح داده می شود.
بازپینگ: اراسال ایمیل با php | گــــوگــــــل
سلام . من وقتی می خواهم ایمیل ارسال کنم با این خطا روبرو می شم.
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
بسیار عالی بود خیلی