برای مشاهده مفیدترین ارسال در این موضوع اینجا کلیک کنید

نمایش نتایج: از شماره 1 تا 3 از مجموع 3
Like Tree2نفر پسندیدند
  • 1 ارسال توسط Hossein
  • 1 ارسال توسط Pouya

موضوع: چگونگی ارسال ایمیل در ASP.net

  1. #1
    بنیانگذار
    تاریخ عضویت
    2010 January
    محل سکونت
    زیر سایه خدا
    سن
    32
    ارسال ها
    1,307
    تشکر
    2,923
    تشکر شده 2,205 بار در 886 پست
    نوشته های وبلاگ
    37


    2 امتياز مثبت از 2 راي
    آيا اين پست براي شما سودمند بود؟ بله | خیر

    چگونگی ارسال ایمیل در ASP.net

    بسم الله الرحمن الرحیم
    سلام .
    برای ارسال ایمیل من در سی شارپ قبلا یه تاپیک زدم . که میشه به اون هم مراجعه کرد ( اینجا ) . توی ارسال ایمیل در Asp.net یک سری نکات هست که اگه رعایت بشه دقیقا همون کد قابل استفاده است بدون هیچ تغییری .
    این شد که تصمیم گرفتم کد مربوط به ارسال ایمیل رو در ASP.net هم بنویسم و توضیحات مورد نیازشو اینجا بدم. انتهای متن هم طبق معمول پروژه بصورت کامل قرار داده شده.
    خب کد مربوطه برای ارسال ایمیل در ASP.net بصورت زیر هست :


    //In the name of GOD
    //Seyyed Hossein Hasan Pour
    //Ustmb.ir
    using System;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Net.Mail;
    //using System.Windows.Forms;

    public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnSend_Click(object sender, EventArgs e)
    {
    string smtpServer = "";
    int smtpPort = 0;
    bool sslSupport = false;

    MailMessage message = new MailMessage();

    try
    {
    MailAddress fromAddress = new MailAddress(txtBoxSendFrom.Text);
    message.From = fromAddress;
    message.To.Add(txtBoxSendTo.Text);
    message.Subject = txtBoxSubject.Text;
    message.IsBodyHtml = true;
    message.Body = txtBoxMessage.Text;

    if (rdBtnGoogle.Checked)
    {
    smtpServer = "smtp.gmail.com";
    smtpPort = 587;
    sslSupport = true;
    }
    else
    {
    smtpServer = "smtp.mail.yahoo.com";
    smtpPort = 587;
    sslSupport = false;//یاهو سکیور کانکشن یا همون ارتباط امن رو پشتیبانی نمیکنه .برای همین اگه این ترو باشه ارور میگیرید
    }

    SmtpClient smtpClient = new SmtpClient(smtpServer, smtpPort);
    smtpClient.EnableSsl = sslSupport;
    smtpClient.UseDefaultCredentials = true;
    smtpClient.Credentials = new System.Net.NetworkCredential(txtBoxSendFrom.Text, txtBoxPassword.Text);

    smtpClient.Send(message);
    lblStatus.Text = "ارسال شد.";
    }
    catch (Exception ex)
    {
    //MessageBox.Show(ex.Message);
    //اگه برای مصارف تست روی سیستم خودتون فقط و فقط . میخواین این فعال بشه کافیه از بخش ادد رفرنس سیستم.ویندوز.فرم رو ادد کنین
    //بعد بالا بنویسید using System.Windows.Forms;

    lblStatus.Text = ex.Message;
    }
    }
    }



    خب حالا ببینیم اینها به چه معناست .
    ما بطور کلی برای ارسال ایمیل به دوتا کلاس بیشتر نیاز نداریم کلاس
    MailMessage و SmtpClient
    شما پیام و عنوان و سایر ویژگی های مربوط به پیامتون رو در قالب یک MailMessage پیاده میکنید و بعد از طریق SmtpClient اون رو ارسال میکنید .

    Info
    نکته مهم : کلاس MailMessage در دوتا namespace وجود داره . شما حتما از System.Net.Mail; استفاده کنید . چون نیم اسپیس Web.Mail اصطلاحا Deprecated یا از دور خارج شده است.

    Info


    پس حتما دقت کنید
    System.Net.Mail; رو using کرده باشید .

    مشکلی که بیشتر افراد دارن بحث سرور ایمیل هست . که بعنوان یک بخش اصلی حتما باید در کد
    قید بشه.
    اکثر ما چون در روی سیستممون سرور ایمیل نداریم با بیشتر کدهایی که بعنوان مثال در اینترنت اومده برای ارسال ایمیل در سی شارپ و ASP.net به مشکل بر میخوریم .
    البته اینم بگم وقتی ما داریم ASP.net کار میکنیم . این مشکل فقط زمانی هست که داریم رو سیستممون تو ویژوال استودیو کد رو تست میکنیم . اگه کد رو ببریم روی سرورمون آپلود کنیم چون روی سرور ما سرور ایمیل هم نصب و فعال شده مشکلی نداریم.
    به هر حال برای اینکه ما هم روی سیستم خودمون و هم تو وبسایت مشکلی نداشته باشیم دوتا راه داریم


    1. سرور ایمیلی رو روی سیستممون نصب کنیم و براحتی موقعی که از ما اطلاعات این سرور رو میخواد اون اطلاعات رو بهش میدیم و تمام . (معمولا اسم سرور localhost و پورت 25 ( پورت پیشفرض SMTP) قرار میدیم-مگه اینکه موقع نصب اسم سرور و شماره پورت متفاوتی رو تنظیم کرده باشیم)
    2. از یه سرور رایگان مثل سرور ارسال ایمیل گوگل یا یاهو استفاده کنیم .


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

    Info
    اطلاعات سرور ایمیل گوگل:

    نام سرور ایمیل : smtp.gmail.com
    پورت : 456, 587
    ssl : فعال


    Info
    اطلاعات سرور یاهو :


    نام سرور ایمیل : smtp.mail.yahoo.com
    پورت : 456, 587
    ssl : فعال


    خب براحتی مقادیر مورد نظرمون رو مقدار دهی میکنیم که بصورت زیر میشه :


    SmtpClient smtpClient = new SmtpClient();
    smtpClient.Host = "smtp.gmail.com";
    smtpClient.Port = 587;//do ta port dare yeki 456 yeki ham in 587! 456 kar nemikone engar!
    smtpClient.EnableSsl = true;//baraye hamon protocole https hast.(bayad true bashe)




    اگه ما سرور ایمیل رو سیستم خودمون فعال بود که راحت میتونستیم بنویسیم : (اگه وب سایت داریم و سایتمون رو آپلود کردیم تو 99 درصد اوقات تنظیم زیر درست هست اگر ارور داد به مدیر سرورتون اطلاع بدید و بگید اطلاعات میل سرور چی هست و اون اطلاعات رو در زیر وارد کنید )


    SmtpClient smtpClient = new SmtpClient("localhost",25);


    Info نکته ای که اینجا باید بهش اشاره کنم اینه موقع استفاده از سرور ایمیل هم گوگل هم یاهو از پورت 587 استفاده کنید.
    نکته بعدی اینه که یاهو ارتباط امن رو پشتیبانی نمیکنه در این حالت پس EnableSsl باید برابر false باشه.



    خب حالا ما برای اینکه بتونیم از این ایمیل سرور ها استفاده کنیم لازمه یه ایمیل داشته باشیم . اگه از گوگل بخواییم استفاده کنیم گوگل از ما جی میل میخواد و اگه از یاهو بخواییم استفاده کنیم سرورش از ما اطلاعات یه ایمیل یاهو رو میخواد . برای همین ما از بخش زیر برای ارسال این اطلاعات به سرور ایمیل مورد نظرمون استفاده میکنیم:
      smtpClient.UseDefaultCredentials = true;
    smtpClient.Credentials = new System.Net.NetworkCredential(txtFromEmail.Text, txtEmailPass.Text);


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

                    smtpClient.Send(message);


    برای انتهای کار هم یه توضیح هم در مورد IsBodyHtml بدم که تو بخش MailMessage استفاده اش کردیم .
    اگر میخوایید پیامی که ارسال میکنید بصورت HTML باشه - یعنی از تگهای HTML توش استفاده شده باشه این بخش رو TRUE میکنید . امروزه تقریبا همه میل سرورها این قابلیت رو دارن و میتونید براحتی این مقدار رو برابر TRUE قرار بدید و ازش استفاده کنید.
    نکته مهم اینه که اگه بصورت معمولی سعی کنید تو تکست باکستون HTML بنویسید . میبینید که وقتی سند رو میزنید با ارور زیر مواجه میشید . :

    A potentially dangerous Request.Form value was detected from the client

    این ویژگی ASP.net برای جلوگیری از حملات XSS هست . و ویژگی بسیار خوبیه .

    برای اینکه این ارور بهتون داده نشه ما کافیه یه کار کوچیک دیگه رو انجام بدیم . ( اگه از دات نت فریم ورک 4 استفاده میکنید باید یه قدم دیگه هست که میگم ) .
    خب برای اینکه این قابلیت خوب asp.net رو غیر فعال کنیم که بما گیر نده . صفحه کدهاتون رو باز کنید و به عبارتی که ابتدای صفحه نوشته شده نگاه کنید : یه چیزی مثل این باید باشه :


    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    کافیه به کد بالا کد زیر رو اضافه کنید :
    ValidateRequest="false"

    نهایتا شکل زیر رو باید داشته باشید :
    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  ValidateRequest="false"%>


    خب اگه ما با دات نت فریم ورکهای قبل از 4 کار بکنیم تا همین جا کافیه . اما اگه پروژه ما دات نت فریم ورک 4.0 هست باید قدم بعدی رو هم برداریم .
    واردweb.config تون بشید و عبارت زیر رو پیدا کنید

        <system.web>

    زیرش این عبارت رو قرار بدید:

    <httpRuntime requestValidationMode="2.0" />
    </system.web>
    <pages validateRequest="false">
    </pages>


    . خب حالا فایل رو سیو کنید و تمام .

    این موضوع خیلی خیلی مهمه که اگه این ویژگی رو غیر فعال کردید و اگه این قسمتی هست که کاربر قراره باهاش کار بکنه و مقدار وارد بکنه . ضروریه که خودتون تمهیدات لازم رو چک کنید که کاربر نتونه اسکریپت بنویسه.

    یه نکته ای که توی پروژه ASP.net توضیح دادم بصورت کامنت اینه که چرا ما از MessageBox بصورت پیش فرض نمیتونیم استفاده کنیم . و حالا اگه بخوایم استفاده کنیم ازش چیکار باید بکنیم .
    اول از همه اینکه تا جایی که ممکنه براتون سعی کنید از MessageBox استفاده نکنید چون میدونید وقتی که مسج باکس نمایش داده میشه حتما باید یک نفر روش کلیک کنه تا بسته بشه و بعد برنامه ادامه پیدا کنه .
    اگه کسی اون پنجره رو نبنده برنامه همونطور منتظر میمونه .
    خب اینا چه ربطی به موضوع ما داره . ربطش اینه که مسج باکس فقط و فقط سمت سرور نمایش داده میشه . یعنی کاربر شما اگه بزنه www بیاد تو سایتتون بعد مثلا دکمه ای بزنه و شما خواسته باشید اطلاعات یا چیزی رو با یه MessageBox بهش نشون بدید اون کاربر هیچ چیزی نمیبینه ! هی صبر میکنه میبینه خبری نشد ! دوباره هی صبر میکنه میبینه باز خبری نشد! تا اینکه بعد از مدتی سایتتون رو میبینده و خلاص! این وسط تکلیف این MessageBox چی شده ؟ مگه قرار نبود اجرا بشه ؟ پس چی شد؟
    MessageBox ما اجرا شده منتها سمت سرور! یعنی اگه کسی پشت سرور ما نشسته باشه یهو میبینه یه پنجره از نا کجا آباد پیداش شد! اگه اون زمان کسی پشت سرور باشه و مانیتوری در کار باشه و بتونه ببینه شاید ببنددتش و کار کاربر ما راه بیوفته !
    اما تصور کنید سایت ما کاربرای زیادی داره ! 100 تا کاربر بیان تو سایت بخوان یه کاری بکنن ! اینور حداقل صدتا پنجره مسج باکس باز میشه ! حالا باز اگه کاربرا بخوان صفحه رو Refresh کنن که مثلا کارشون راه بیوفته که باز بدتر! سمت سرور پر میشه از مسج باکس و اگه این کار ادامه پیدا کنه شاید حتی به اختلال تو کار سرور هم منجر بشه ( دیگه ادمم پشت سرور نشسته باشه نمیتونه هر ثانیه ای یه کاربر میرسه یه پنجره ایجاد میکنه همه رو ببنده!)
    ما اینجا فرض کردیم که یه آقای محترمی پشت سرور نشسته باشه . اما واقعا همیشه اینطور نیست . حتما دیدید سرورهای بزرگ دنیا رو ( حداقل عکسهاشو) . این سرورها دیگه اینطور نیستن که یه کامپیوتر ساده باشن مثل چیزی که ما داریم و یه مانیتوری و یه کارت گرافیکیو یه اسپیکریو ... داشته باشن . مجموعه بهم متصلی از چند تا کیس رو در نظر بگیرید مثلا که دارن کار میکنن و احتمالا نحوه برقراری ارتباط با اونها هم از طریق یه کنسول مدیریتیه .
    خب اگه تو یکی ا زاین سرورها سایت ما آپلود شده باشه و برنامه ما اینطور حرکتی بخواد بکنه . دیگه نتیجش مشخصه اونجا دیگه کسی نیست که بخواد رو این پنجره ها کلیک کنه و برنامه ادامه پیدا کنه . نتیجه اش میشه هنگ برنامه وب ما برای کاربر.
    خب لابد میپرسید من تو ویژوال استودیو کد میزنم که این نشون داده میشه این چیه پس . خب بخاطر اینه که شما در حال کد نویسی هستین و سرور شبیه سازی میشه موقع تست برنامتون ( توسط ویژوال استودیو) .
    خب ممکنه بپرسید این که انقدر بده چرا ممکنه یکی بخواد ازش استفاده کنه :
    جوابش اینه که ممکنه برای تست این کمک بهتری بکنه . یادتون باشه فقط و فقط برای تست - وشاید برای اون فرد اینطور راحت تره .
    خب اگه یکی بخواد اینو فعال کنه چیکار باید بکنه :
    باید از بخش Add reference بدنبال System.Windows.Forms بگرده و اونو به پروژه اش ادد . بکنه . بعد در بخش using ها . عبارت زیر رو اضافه کنه . بعدش براحتی میتونه از مسج باکس استفاده کنه .(تو پروژه ای که ضمیمه کردم این کارا انجام شده کافیه یوزنیگ مربوطه رو از حالت کامنت خارج کنید و بعد مسج باکس رو تست کنید).

    پروژه ای که ضمیمه کردم هم باهاش میتونید از طریق جی میل ایمیل ارسال کنید و هم از طریق یاهو . تغییرات مورد نظر برای کار کردن با این دو ایمیل سرور هم توی کد مشخص شده و براحتی میتونید ازش در پروژهاتون استفاده کنید.


    فایل های پیوست شده
    behrouzyou این نویسه را میپسندد.
    توکل بخدا
    http://DeepLearning.ir
    اولین و تنها مرجع یادگیری عمیق ایران


    هرکس از ظن خود شد یار من
    از درون من نجست اسرار من




  2. #2
    عضو تازه وارد
    تاریخ عضویت
    2013 April
    ارسال ها
    2
    تشکر
    0
    تشکر شده 0 بار در 0 پست


    آيا اين پست براي شما سودمند بود؟ بله | خیر
    سلام من از كد شما استفاده كرم و با ارور زير مواجه شدم ميشه راهنمايي كنيد؟
    The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Authentication required
    قبلا از راهنمايي تون كمال تشكر رو دارم.



  3. #3
    ADMIN
    تاریخ عضویت
    2011 October
    محل سکونت
    گیلان
    سن
    26
    ارسال ها
    136
    تشکر
    814
    تشکر شده 480 بار در 131 پست


    آيا اين پست براي شما سودمند بود؟ بله | خیر
    نقل قول نوشته اصلی توسط tmaz نمایش پست ها
    سلام من از كد شما استفاده كرم و با ارور زير مواجه شدم ميشه راهنمايي كنيد؟
    The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Authentication required
    قبلا از راهنمايي تون كمال تشكر رو دارم.
    سلام

    از کدوم سروری برای میل استفاده میکنید ؟

    این :

      smtpClient.EnableSsl = true; 


    یا این :

    smtpClient.UseDefaultCredentials = false;


    رو هم تست کنید
    اگر مشکل حل نشد
    کد بخش ارسال میل خودتون رو کامل ابنجا بذارین




    Hossein این نویسه را میپسندد.


    ..::Never Trust Someone Who Lies To You , Never Lie To Someone Who Trusts You::..


 

 

کاربران برچسب خورده در این موضوع

کلمات کلیدی این موضوع

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  


Powered by vBulletin
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0
Persian Language By Ustmb.ir
این انجمن کاملا مستقل بوده و هیچ ارتباطی با دانشگاه علوم و فنون مازندران و مسئولان آن ندارد..این انجمن و تمامی محتوای تولید شده در آن توسط دانشجویان فعلی و فارغ التحصیل ادوار گذشته این دانشگاه برای استفاده دانشجویان جدید این دانشگاه و جامعه دانشگاهی کشور فراهم شده است.لطفا برای اطلاعات بیشتر در رابطه با ماهیت انجمن با مدیریت انجمن ارتباط برقرار کنید
ساعت 03:18 AM بر حسب GMT +4.5 می باشد.