ارسال ایمیل با php یکی از پر استفاده ترین قابلیت های اپلیکیشن های تحت وب است .
اساسا تابع mail() در php برای ارسال ایمیل توسط اسکریپت استفاده می شود زمانی که شما با تابع mail()
ایمیلی را ارسال می کنید ایمیل از طریق وب سرور سایت ارسال می شود.
بعضی اوقات هنگام ارسال ایمیل ممکن است به علت حجم بالای درخواست های سرور مشکلاتی در ارسال موفقیت آمیز ایمیل بوجود باید اما با SMTP این مشکل قابل حل می باشد .
استفاده از SMTP سرور ، بهترین روش پیشنهادی برای ارسال ایمیل با php است.
زمانی که یک ایمیل از طریق SMTP ارسال می شود ، ایمیل به جای وب سرور از میل سرور (mail server) ارسال می شود که باعث درصد موفقیت ارسال ایمیل با php و اسپم نشدن ایمیل می شود.
در واقع با ارسال ایمیل با SMTP در php می توان این تضمین را بوجود آورد که ایمیل با موفقیت در پوشه inbox کاربر قرار گیرد
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
کد ارسال ایمیل با php و کتابخانه PHPMailer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?php // Include and initialize phpmailer class require 'PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; // SMTP configuration $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'user@example.com'; $mail->Password = '******'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('info@example.com', 'netparadis'); $mail->addReplyTo('info@example.com', 'netparadis'); // Add a recipient $mail->addAddress('john@gmail.com'); // Add cc or bcc $mail->addCC('cc@example.com'); $mail->addBCC('bcc@example.com'); // Email subject $mail->Subject = 'Send Email via SMTP using PHPMailer'; // Set email format to HTML $mail->isHTML(true); // Email body content $mailContent = "<h1>Send HTML Email using SMTP in PHP</h1> <p>This is a test email has sent using SMTP mail server with PHPMailer.</p>"; $mail->Body = $mailContent; // Send email if(!$mail->send()){ echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; }else{ echo 'Message has been sent'; } |
دانلود کتابخانه PHPMailer
یکی از راحترین راه های ارسال ایمیل با php و SMTP استفاده از کتابخانه PHPMailer است . کانفیگ های مختلف PHPMailer به شما اجازه ارسال انواع ایمیل های متنی , HTML و همچنین پیوست فایل را می دهد .
در این آموزش خواهیم دید چگونه یک ایمیل از نوع محتوای HTML را با SMTP در PHP می شود ارسال کرد .از مثال زیر می توانید برای ارسال ایمیل با php از طریق کتابخانه PHPMailer استفاده کنید
ارسال ایمیل HTML در php با PHPMailer
با تابع isHTML(true)
نوع فرمت ایمیل را ست میکنیم
1 2 3 4 |
// Add attachments $mail->addAttachment('docs/netparadis_1.pdf'); $mail->addAttachment('docs/netparadis_2.docs'); $mail->addAttachment('images/netparadis_3.png', 'new-name.png'); //set new name |
ارسال فایل در ایمیل
با متد addAttachment()
در کلاس PHPMailer
یک فایل ضمیمه را پیوست (آدرس دهی) کنید . همچنین میتوانید چندین فایل مختلف را با تکرار addAttachment()
اضافه کنید
1 2 3 |
// Add multiple recipients $mail->addAddress('hasan@gmail.com'); $mail->addAddress('shafiei@gmail.com'); |
ارسال انبوه ایمیل
با اضافه کردین چندین باره addAddress()
میتوانید یک ایمیل را به چند نفر همزمان ارسال کنید
ارسال ایمیل با SMTP جی میل (Gmail)
اگر قصد ارسال ایمیل با SMTP GMAIL دارید باید چندین تغییر در تنظیمات اکانت جی میل خود انجام بدید .
- وارد حساب گوگل خود در صفحه gmail.com شوید
- به قسمتMy Account بروید بر روی Signing in to Google در Sign-in & security کلیک کنید
- در بخش Password & sign-in method قابلیت ۲-Step Verification. را غیرفعال کنید
- در بخش Connected apps & sites قابلیت Allow less secure apps را فعال کنید
اوکی تمام شد ! حالا می توانید با استفاده از SMTP سرور Gmail با اسکریپت php خود ایمیل ارسال کنید
حتما اول اسکریپت خود مشخصات اکانت (آدرس ایمیل و پسورد )و SMTP host و پورت را وارد کنید
1 2 3 4 5 6 7 8 |
// SMTP configuration $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'netparadis.com@gmail.com'; $mail->Password = '********'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; |
ارسال ایمیل با php در اپلیکیشن ها تحت وب بسیار کاربردی و مهم است که برای اطلاع رسانی و عملیات مختلف کاربری ، ایمیل مارکتینگ فروش محصولات و .. استفاده می شود
موفق باشید.
سلام
من ازphpmailer روی استفاده کردم روی حالت لوکال جواب میده ولی روی هاست جواب نمیده
تیکت زدم یکم راهنمایی کردن اما متوجه نشدم چطور باید tlsخودکار رو غیر فعال کنم
شما میتونین راهنمایی کنین ؟
سلام.
برای غیرفعال سازی tls کافیه داخل این کد یا کدهای خودتون جاییکه متغیرهای ست کردن پسورد ک این موارد قرارگرفتن این کدها رو هم اضافه کنید
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false
سلام مهندس شفیعی من مشکل اجرا نشدن رو هاست رو حل کردم که مشکل یکی از دوستان دیگه هم بود
فقط راجع به راست چین کردن من کدهای phpmailer رو وسط دو تا تگ body که قرار دادم و استایل میدم کار نمیکنه؟
body style=”text-align:right”
کدهای ایمیل
/body
/html
اینجوری درسته من اینجوری نوشتم ؟
سلام حسن جان با outlook روی هست هم درست کار میکنه ولی گوگل مشکل داره
علت چیه مهندس شفیعی راهنمایی کنید لطفا
حسن جان css برای من کار نمیکنه؟
تو لوکال ایمیل به درستی ارسال میشه ولی رو هاست واقعی یه پیغام میده راجع به احراز هویت میده من اون دسترسی دو مرحله ای رو هم خاموش کردم میشه تو چت به عکس ارور نگاه کنید راهنماییم کنید ؟ممنون میشم
این دیگه آخرین سوالم بود با سپاس
سلام مجدد مهندس شفیعی گل
من فایل autoload رو دانلود کردم ایمیل درست دریافت میشه برای حروف فارسی utf8 رو ست کردم فقط برای راست چین کردن ایمیل دریافتی کدی تو اینترنت ندیدم میشه راهنمایی کنید چه کدی باید بزنم ؟
سلام.
از استایل css بصورت اینلاین استفاده کنید
body style=”text-align:right; direction:rtl;”
سلام مهندس شفیعی خدا قوت
برای ارسال ایمیل همینکه صفحه ای که کد ها توش نوشته شده باز کنیم تو مرور گر ایمیل ارسال میشه ؟
سلام بله
سلام من از گیت لایبرری و دانلود کردم ولی فایل PHPMailer/PHPMailerAutoload.php یا vendor/autoload.php پیدا نکردم ممنون میشم جواب بدید
سلام. باید با کامپوزر ایجاد کنید
https://netparadis.com/what-composer-in-php
require ‘PHPMailer/PHPMailerAutoload.php’
سلام فایل اتولود در پوشه نیست چکار باید بکنم
سلام.
از اینجا دانلود کنید: https://github.com/PHPMailer/PHPMailer
سلام خسته نباشید
ببخشید متاسفانه من از سورس استفاده کردم اما وقتی که تست می کنم هیچ پیغامی نمی دهد.
نه میگه ایمیل ارسال شده و نه می گه ایمیل ارسال نشده است.
چه باید کنم؟
سلام.
در این شرط تعریف شده که اگر ایمیل ارسال شد یا به هر دلیلی ارسال نشد پیام نمایش داده بشه
if(!$mail->send()){
echo ‘Message could not be sent.’;
}else{
echo ‘Message has been sent’;
}
ممکنه خطای fatal داشته باشید و نمایش خطا در هاست شما غیرفعال است که میتونید به هاستینگ اطلاع بدید و از این آموزش هم برای فعالسازی خطا میتونید استفاده کنید اگر هاست چیزی رو محدود نکرده باشه
https://netparadis.com/php-errors/
یا اینکه کنار فایل php فایل خطای error_log ایجاد میشه
با سلام و خسته نباشید
کدام کد ها رو باید تغییر بدم تا روی سایت خودم انجام گیرد ینی کد های خصوصی کدامند که برا هر کس متفاوته؟
سایت بنده آقای شفیعی برید تو قسمت contact ببینید فرم ایمیلم را و اگر میشه راهنمایی ام بکنید
بسیار متشکر
سلام. بیشتر بخش ها از عنوان گرفته تا متن و آدرس ایمیل ها و مشخصات smtp تغییر کند.
اگر میخواهید برای بخش تماس با ما استفاده کنید این آموزش را ببینید :
ساخت فرم تماس با ما در php
با سلام می خواستم بدونم اگر بخواهیم بجای gmail از outlook استفاده کنیم باید چه کار کنیم
سلام. هر سرویس دهنده یک smtp سرور و یک پورت داره که الان پورت ۵۸۷ ثابت هست و فقط آدرس url سرور رو به smtp-mail.outlook.com تغییر بدید و یوزر و پسورد outlook خودتون رو قرار بدید
با سلام من این کد را در Localhost اجرا کردم درست کار کرد ولی وقتی بر روی هاست واقعی آپلودش کردم یک همچنین اروری به من می دهد
Message could not be sent.Mailer Error: The following From address failed: info@tahmooresian.ir
SMTP server error: 5.7.0 Authentication Required. Learn more at 530 5.7.0 https://support.google.com/mail/?p=WantAuthError i9sm12498629wma.47 – gsmtp
سلام.
خطا مربوط به ssl هست
با سلام مجدد برای حلش باید چه کنم ؟
سلام.
احتمالا به خاطر هاست و ورژن php هست.
ورژن جدید کتابخانه رو دانلود و جایگزین کنید:
https://github.com/PHPMailer/PHPMailer/tree/master/src
برای رفع این خطا باید دسترسی دو مرحله ای اکانت گوگل خودتون رو فعال کنید و بعد یه گزینه فعال میشه به اسم گذرواژه های ویژه برنامه روش کلیک کنید و یک پسورد ۱۶ رقمی بهتون میده این پسورد رو تو قسمت پسورد phpmailer قرار بدید دیگه مشکلی رو هاست نخواهید داشت با تشکر
با پسورد معمولی gmail رو هاست واقعی کار نمیکنه
سلام من کدهارو روی هاست واقعی اجرا کردم و خطای
SMTP Error: Could not connect to SMTP host.
را گرفتم قبلا یادمه کار میکرد اما حالا نمیدونم
چرا کار نمی کنه
مشخصاتمم همه رو درست زدم و حتی تو thunder brid هم تست کردم
سلام. شاید مشکل مربوط به ورژن php باشد و هاست هم میتونه تاثیر گذار باشه.
واقعا خوب و مفید بود.
حالا باید تستش کنم ببینم چطور جواب میده.
واقعا از افرادی مثل آقای شفیعی خوشم میاد که دنبال یاد گیری چیزای جدیدند و به دیگران هم می آموزند.
آقای شفیعی چند وقتیه که مسئله ای ذهنم را درگیر کرده و آن خواندن و ذخیره اثر انگشت گوشی با PHP است. اگر موافق هستید بهم ایمیل بزنید تا با هم دیگه دربارش تحقیق کنیم و به نتیجه برسیم اگر هم قبلا راه مناسبی برایش پیدا کرده اید ممنون میشم تجارب خودتون را به اشتراک بزارید🙏
سلام. خوشحالیم که مفید واقع شده.
خیلی ممنونم. لطف دارید.
بله در مورد احراز هویت با اثر انگشت (biometric authentication) قبلا کتابخانه هایی که با php نوشته شدند منتشر شده :
https://github.com/AyushKaul/Biometric-Fingerprint-Integration
ببخشید بازم سوال
میخوام فرم ارسال ایمیل رو به دیتابیس وصل کنم میتونین کمک کنید ؟؟
اگر نیاز به انجام پروژه دارید که میتونید درخواست رو به ایمیل سایت یا از صفحه تماس با ما ارسال کنید
ببخشید چطوری کاری کنم که وقتی کسی داخل سایت ثبت نام کرد براش پیام خوش امد گویی فرستاده بشه
سلام. در کد ثبت نام میتونید این کد ایمیل خوش آمدگویی رو اضافه کنید.
چطوری ؟؟
اموزشی در این باره دارید ؟؟
خیر. تا زمانی که php مقدماتی به بالا را یاد نگیرید نمیتونید چنین چیزی رو پیاده سازی کنید
شما بگید من یاد میگیرم لطفا
متاسفانه بحثی نیست که در بخش نظرات بشه توضیحش داد.
داخل سایت نزاشتین و جایی رو نمیدونید داره یا نه ؟؟
نه متاسفانه این موضوع چیزی نیست که جایی به خاطرش پستی ارسال شده باشه و باید با علم برنامه نویسی خودتون بتونید این تغییر رو لحاظ کنید
سلام
این روش رو لوکال هاست هم جواب میده؟؟
سلام. بله در صورتی که extension=php_openssl.dll در لوکال شما فعال باشه میتونید از این روش در لوکال هاست هم استفاده کنید
extension=php_openssl.dll در فایل php.ini (فعال کردن با حذف
;
)یا چک کردن از طریق تابع phpinfo()
موفق باشید.
سلام
امکانش هست همین کد های که نوشتید به صورت سورس بزارید
ممنون
سلام . بله قرار داده شد که از باکس دانلود میتونید دریافت کنید.
موفق باشید.