PDA

View Full Version : سوال: امكان فرستادن ايميل در برنامه asp.net



shiva_1
سه شنبه 31 خرداد 1390, 18:20 عصر
با سلام
من سايتي با asp.net 2010 فريم ورك4 و #c طراحي كردم كه ميخوام از امكان ايميل زدن هم استفاده كنم. يعني مثلا اگر كسي اومد توي سايت و ثبت نام كرد براش يك "ايميل تاييد" بفرستم. لطفا من و راهنمايي كنيد دو روزه ميگردم چيزي پيدا نكردم.:افسرده:

TeacherMath
سه شنبه 31 خرداد 1390, 21:51 عصر
http://barnamenevis.org/showthread.php?71785-%D9%85%D9%82%D8%A7%D9%84%D9%87-%D9%85%D8%B1%D8%AC%D8%B9-%DA%A9%D8%A7%D9%85%D9%84-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%AF%D8%B1-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-2

shiva_1
چهارشنبه 01 تیر 1390, 13:35 عصر
خيلي ممنون آقاي teachMath

مقاله جالبي بود. من كلي هلپهاي .net رو هم خوندم ولي هنوز نتونستم ميلي بفرستم. من الان فعلا تو كلاينت خودم دارم درست ميكنم و تست ميكنم هيچ ميلي زده نميشه نميدونم شايد به خاطر تنظيمات Smtp باشه يا چيز ديگه باشه.

لطفا هركي هر نكته‌اي به ذهنش ميرسه بگه. ميل زدن كه به نظرم ساده ميرسيد چند روزه نتونستم براش راه حلي پيدا كنم

FirstLine
پنج شنبه 02 تیر 1390, 10:54 صبح
با سلام
من با این تابع ایمیل ارسال میکنم و مشکلی هم نداره
اگه سوالی یا مشکلی بود بفرمایید




/// <summary>
/// ارسال ایمیل
/// </summary>
/// <param name="str_MailServer_UserName"></param>
/// <param name="str_MailServer_Password"></param>
/// <param name="str_Sender_Email"></param>
/// <param name="str_Sender_Name"></param>
/// <param name="str_Reciver_Email"></param>
/// <param name="str_Reciver_Name"></param>
/// <param name="str_Subject"></param>
/// <param name="str_Body"></param>
public bool MH_Email_SendMail(string str_MailServer_Host, string str_MailServer_Domain, string str_MailServer_UserName, string str_MailServer_Password, string str_Sender_Email, string str_Sender_Name, string str_Reciver_Email, string str_Reciver_Name, string str_Subject, string str_Body)
{
SmtpClient MyMail = new SmtpClient();
MailMessage MyMsg = new MailMessage();

MyMail.Host = str_MailServer_Host;

MyMsg.To.Add(new MailAddress(str_Reciver_Email, str_Reciver_Name, Encoding.UTF8));
MyMsg.Subject = str_Subject;
MyMsg.SubjectEncoding = Encoding.UTF8;

MyMsg.IsBodyHtml = true;
MyMsg.From = new MailAddress(str_Sender_Email, str_Sender_Name, Encoding.UTF8);
MyMsg.BodyEncoding = Encoding.UTF8;
MyMsg.Body = str_Body;

MyMail.UseDefaultCredentials = false;
if (str_MailServer_Domain != "")
{
NetworkCredential MyCredentials = new NetworkCredential(str_MailServer_UserName, str_MailServer_Password, str_MailServer_Domain);
MyMail.Credentials = MyCredentials;
}
else
{
NetworkCredential MyCredentials = new NetworkCredential(str_MailServer_UserName, str_MailServer_Password);
MyMail.Credentials = MyCredentials;
}
try
{
MyMail.Send(MyMsg);
return true;
}
catch (Exception)
{
return false;
}
}



با تشکر

Rohollaes
پنج شنبه 02 تیر 1390, 11:20 صبح
سلام ، از اینم میتونی استفاده کنی:
برای فرستادن Email از يک صفحه ASP.NET بايستی از کلاس SmtpMail که در فضانام System.Web.Mail قرار دارد استفاده کرد که شامل متد استاتيک Send است. بهرحال ساده ترين راه برای فرستادن Email فراخوانی يک نمونه متد Send از کلاس MailMessage است. کلاس MailMessage در فضانام System.Web.Email قرار دارد که پيغام Email را نشان می دهد.

کلاس MailMessage در برگيرنده خاصيتهای مشابه شئ CDONTS است ( CDONTS رايجترين شئ برای فرستادن Email در ASP کلاسيک است).

بعنوان مثال خاصيتهايی چون: Body ،Priority ،Subject ،BodyFormat ،Bcc ،Cc ،From ،To.

بهرحال برای فرستادن Email بايستی نمونه ای از کلاس MailMessage ساخته شود و خواص آن مشخص شود:

۱- ابتدا نمونه ای از کلاس MailMessage ساخته می شود:
Dim ObjMM As New MailMessage

۲- سپس آدرس email دريافت کننده:
ObjMM.To=" someone@someaddress.comThis email address is being protected from spam bots, you need Javascript enabled to view it "

۳- آدرس فرستنده email:
ObjMM.From=" someoneelse@someotheraddress.comThis email address is being protected from spam bots, you need Javascript enabled to view it "

۴- همچنين می توان فيلدهای Cc و Bcc را داشت:
ObjMM.Cc=" someone2@someaddress.comThis email address is being protected from spam bots, you need Javascript enabled to view it "
ObjMM.Bcc=" someone3@someaddress.comThis email address is being protected from spam bots, you need Javascript enabled to view it "

۵- بوسيله خاصيت BodyFormat نحوه فرستادن email بصورت text و يا html مشخص می شود:
Obj.MM.BodyFormat=MailFormat.Text

۶- خاصيت Priority ميزان Security ميل و فرستادن آنرا مشخص می کند که شامل سه انتخاب High ،Normal و Low است:
ObjMM.Priority=MailPriority.Normal

۷- خاصيت Subject عنوان ميل را مشخص می کند:
ObjMM.Subject="Hello there"

۸- بوسيله Body بدنه Email مشخص می شود ( پيغام ):
ObjMM.Body = "This is body!"

توجه داشته باشيد که فضانام System.Web.Mail در صفحه ASP.NET فراخوانی شود:
<% @import NameSpace="System.Web.Mail" %>

بعد از تعيين خواص MailMessage ، متد Send از کلاس SmtpMail برای کلاس شبيه سازی شده MailMessage بصورت زير فراخوانی می شود:
SmtpMail.Send(ObjMM)

کلاس SmtpMail برای فرستادن Email از سرويس Smtpی استفاده می کند که در ساختار IIS وجود دارد. به تعبير ديگر با بکار بردن متد Send، از سرور داخلی SMTP برای فرستادن Email استفاده می شود. برای مشخص کردن سرور SMTP از نوع ديگر ( غير از پيش فرض ) بايد خاصيت SmtpServer آن بصورت زير تعيين شود:
SmtpMail.SmtpServer= emailservername

در غير اينصورت SmtpServer پيش فرض (Default) بصورت زير است:
SmtpMail.SmtpServer=""

يکی از مهمترين کاربردهای فرستادن Email از طريق صفحات وب دريافت نظرات، اطلاعات و ... از طريق يک فرم html و ارسال آن به مدير سايت است

محمد متاله
جمعه 03 تیر 1390, 02:43 صبح
روش صحیح کار را در اینجا ذکر می کنم

ابتدایک تابع تعریف می کنم که کار ارسال پیغام که حاوی title و body و احیانا فایل attach است را به آدرس مشخصی که در پارامتر وردی تابع قرار دارد می فرستد
مشاهده می فرمایید که برای ارسال ایمیل های فارسی می باست از سیستم UTF8 برای Encoding استفاده کنیم



protected void sendEmail(string title, string body, string attachedFile, string address)
{
MailMessage msg = new MailMessage();
msg.To.Add(address);
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;
msg.Subject = title;
msg.Body = body;

string pathFiles = HttpContext.Current.Server.MapPath("~/files/") + attachedFile;
try
{
Attachment attachFile = new Attachment(pathFiles);
msg.Attachments.Add(attachFile);
}
catch (Exception)
{
}

SmtpClient smtp = new SmtpClient();
smtp.EnableSsl = true;
smtp.Send(msg);
}


توجه داشته باشید که توسط mappath محل فیزیکی فایل را بدست آورده ایم اگر خودتان آدرس فیزیکی فایل را به تابع پاس می دهید این کد را حذف کنید و اگر آدرس مجازی نسبت به ریشه سایت را به تابع پاس می دهید این تابع خودش آدرس فیزیکی فایل را پیدا می کند

توجه: فرض کرده ام که فایل هایتان در پوشه ای به نام files می باشد.

ممکن است که گاهی نیاز به attach کردن فایلی به ایمیل داشته باشید و گاهی هم نداشته باشید پس بهتر هست که از این تابع دو override ایجاد کنید. یکی بدون پارامتر برای فایل attach و دیگری با پارامتری برای attach کردن فایل سپس هر موقع که نیاز شد هر کدام ار تابع های مورد نظر را صدا بزنید

تابعی که پارامتر attachfile نمی گیرد به این صورت هست



protected void sendEmail(string title, string body, string address)
{
MailMessage msg = new MailMessage();
msg.To.Add(address);
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;
msg.Subject = title;
msg.Body = body;
SmtpClient smtp = new SmtpClient();
smtp.EnableSsl = true;
smtp.Send(msg);
}


سوال اینجاست که این ایمیل از طرف چه کسی ارسال می شود

برای این کار می باستکدهای زیر را در web.config اضافه کنید و به جای * ها پسوردتان را قرار دهید
البته ادیتور این سایت mailto را اضافه کرده آن را ننویسید



<system.net>
<mailSettings>
<smtp from="yourmail@gmail.com (yourmail@gmail.com)">
<network host="smtp.gmail.com" port="587" userName="yourmail@gmail.com (yourmail@gmail.com)" password="******" />
</smtp>
</mailSettings>
</system.net>

اگر ویژوال استودیو به تگ هایی که در web.config اضافه می کنید ایراد گرفت یعنی اینکه در جای صحیح قرار نگرفته

این کدها را باید دقیقا در بین تگ </configuration><configuration> قرار دهید
همچنین می بینید که کسی به غیر از شما اگر پسورد ایمیلتان را نداشته باشد نمی تواند از ایمیل شما ارسالی انجام دهد.

محمد متاله
جمعه 03 تیر 1390, 02:52 صبح
روش صحیح کار را در اینجا ذکر می کنم

ابتدایک تابع تعریف می کنم که کار ارسال پیغام که حاوی title و body و احیانا فایل attach است را به آدرس مشخصی که در پارامتر وردی تابع قرار دارد می فرستد
مشاهده می فرمایید که برای ارسال ایمیل های فارسی می باست از سیستم UTF8 برای Encoding استفاده کنیم



protected void sendEmail(string title, string body, string attachedFile, string address)
{
MailMessage msg = new MailMessage();
msg.To.Add(address);
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;
msg.Subject = title;
msg.Body = body;

string pathFiles = HttpContext.Current.Server.MapPath("~/newsletter/files/") + attachedFile;
try
{
Attachment attachFile = new Attachment(pathFiles);
msg.Attachments.Add(attachFile);
}
catch (Exception)
{
}

SmtpClient smtp = new SmtpClient();
smtp.EnableSsl = true;
smtp.Send(msg);
}

]

ممکن است که گاهی نیاز به attach کردن فایلی به ایمیل داشته باشید و گاهی هم نداشته باشید پس بهتر هست که از این تابع دو override ایجاد کنید. یکی بدون پارامتر برای فایل attach و دیگری با پارامتری برای attach کردن فایل سپس هر موقع که نیاز شد هر کدام ار تابع های مورد نظر را صدا بزنید

به یاد داشته باشید که کدهای مربوط به attach را در تابعی که فایل attach ارسال نمی کند را حذف کنید

سوال اینجاست که این ایمیل از طرف چه کسی ارسال می شود

برای این کار می باستکدهای زیر را در web.config اضافه کنید و به جای * ها پسوردتان را قرار دهید
البته ادیتور این سایت mailto را اضافه کرده آن را ننویسید


<system.net>
<mailSettings>
<smtp from="yourmail@gmail.com (yourmail@gmail.com)">
<network host="smtp.gmail.com" port="587" userName="yourmail@gmail.com (yourmail@gmail.com)" password="******" />
</smtp>
</mailSettings>
</system.net>

اگر ویژوال استودیو به تگ هایی که در web.config اضافه می کنید ایراد گرفت یعنی اینکه در جای صحیح قرار نگرفته

این کدها را باید دقیقا در بین تگ </configuration><configuration> قرار دهید
همچنین می بینید که کسی به غیر از شما اگر پسورد ایمیلتان را نداشته باشد نمی تواند از ایمیل شما ارسالی انجام دهد.

chimeh
شنبه 09 مهر 1390, 16:23 عصر
چهر آبجكت اول را مقدار دهي كن شك نكن كه جواب ميده

public static bool SendMail(string target, string subject, string body)
{
try
{
string host = urhostname;
string username = urusername;
string password = urpassword;
string source = ursource;

SmtpClient mailClient = new SmtpClient(host);
MailMessage message = new MailMessage(source, target, subject, body);
mailClient.Credentials = new NetworkCredential(username, password);
message.ReplyTo = new MailAddress(source);
message.SubjectEncoding = Encoding.UTF8;
message.BodyEncoding = Encoding.UTF8;
message.IsBodyHtml = true;
mailClient.Send(message);
return true;
}
catch (Exception ex)
{
(new Logger()).LogException(ex);
return false;
}
}

hakan648
یک شنبه 08 آبان 1390, 03:56 صبح
سلام
بنده یک کلاس برای کا با ایمیل نوشتم .
به شما امکاناتی نظیر استفاده از قالب , ارسال به چندین کاربر , استفاده از BCC و ... رو میده .
از این کلاس در پروژه رایگان "سیستم مدیریت مقاله (http://barnamenevis.org/showthread.php?310532-%D8%B3%D9%88%D8%B1%D8%B3-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D9%85%D9%82%D8%A7%D9%84%D9%87-%D8%A8%D8%A7-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%DA%86%D9%86%D8%AF%D9%84%D8%A7%DB%8C%D9%87)" استفاده کردم .
البته مشابه کدهای دوستان هست اما روش استفاده ساده تر است .

بعد از اضافه کردن این دو کلاس به پوشه App_Code به شکل زیر ایمیل ارسال کنید :
( این دقیقا کدی هست که در پروژه ای که گفتم برای ارسال خبرنامه استفاده کردم )



Private EmailTools As New Tools.EmailTools
Private EmailTemplateTools As New Tools.EmailTemplateTools

Private Sub SendNewTopicAlertToNewsLetterUsers(ByVal ID As String, ByVal AuthorName As String, ByVal Title As String, ByVal Summary As String)
Dim TemplateBody As String
Dim Users As New BLL.Users
Dim Link As String = "http://" & AppSettings("DomainName") & "/ShowTopic.aspx?TopicID=" & ID

EmailTemplateTools.TemplateFullPath = Server.MapPath("../EmailTemplate/NewTopicAlert.htm")
EmailTemplateTools.ReplaceValue("###authorname###", AuthorName)
EmailTemplateTools.ReplaceValue("###topictitle###", Title)
EmailTemplateTools.ReplaceValue("###topicsummary###", Summary)
EmailTemplateTools.ReplaceValue("###topiclink###", Link)

TemplateBody = EmailTemplateTools.GetTemplate()

EmailTools.Body = TemplateBody
EmailTools.UseBcc = True
EmailTools.Subject = AppSettings("NewsLetterEmailSubject")
EmailTools.SenderName = AppSettings("NewsLetterEmailSenderName")
EmailTools.SenderEmail = AppSettings("NewsLetterEmailSiteEmail")

Dim dr As SqlDataReader = Users.GetNewsLetterUsers()

Do While dr.Read
Dim FullName As String = TryCast(dr("UserFirstName"), String) & " " & TryCast(dr("UserLastName"), String)
EmailTools.Recievers.Add(New MailAddress(dr("UserEmail"), FullName))
Loop

EmailTools.SendEmail()

End Sub


امیدوارم مفید بوده باشه .
موفق باشید ...

alonemm
یک شنبه 08 آبان 1390, 13:33 عصر
باسلام:
فراموش نکنید که برای ارسال ایمیل از روی لوکال درگاه SMTP رو باز کنید.
بهتره از برنامه SMTP Server استفاده کنید و این برنامه رو استارت کنید.

موفق باشید.

lyrebird
سه شنبه 26 اردیبهشت 1391, 13:17 عصر
سلام
بنده یک کلاس برای کا با ایمیل نوشتم .
به شما امکاناتی نظیر استفاده از قالب , ارسال به چندین کاربر , استفاده از BCC و ... رو میده .
از این کلاس در پروژه رایگان "سیستم مدیریت مقاله (http://barnamenevis.org/showthread.php?310532-%D8%B3%D9%88%D8%B1%D8%B3-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D9%85%D9%82%D8%A7%D9%84%D9%87-%D8%A8%D8%A7-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%DA%86%D9%86%D8%AF%D9%84%D8%A7%DB%8C%D9%87)" استفاده کردم .
البته مشابه کدهای دوستان هست اما روش استفاده ساده تر است .

بعد از اضافه کردن این دو کلاس به پوشه App_Code به شکل زیر ایمیل ارسال کنید :
( این دقیقا کدی هست که در پروژه ای که گفتم برای ارسال خبرنامه استفاده کردم )



Private EmailTools As New Tools.EmailTools
Private EmailTemplateTools As New Tools.EmailTemplateTools

Private Sub SendNewTopicAlertToNewsLetterUsers(ByVal ID As String, ByVal AuthorName As String, ByVal Title As String, ByVal Summary As String)
Dim TemplateBody As String
Dim Users As New BLL.Users
Dim Link As String = "http://" & AppSettings("DomainName") & "/ShowTopic.aspx?TopicID=" & ID

EmailTemplateTools.TemplateFullPath = Server.MapPath("../EmailTemplate/NewTopicAlert.htm")
EmailTemplateTools.ReplaceValue("###authorname###", AuthorName)
EmailTemplateTools.ReplaceValue("###topictitle###", Title)
EmailTemplateTools.ReplaceValue("###topicsummary###", Summary)
EmailTemplateTools.ReplaceValue("###topiclink###", Link)

TemplateBody = EmailTemplateTools.GetTemplate()

EmailTools.Body = TemplateBody
EmailTools.UseBcc = True
EmailTools.Subject = AppSettings("NewsLetterEmailSubject")
EmailTools.SenderName = AppSettings("NewsLetterEmailSenderName")
EmailTools.SenderEmail = AppSettings("NewsLetterEmailSiteEmail")

Dim dr As SqlDataReader = Users.GetNewsLetterUsers()

Do While dr.Read
Dim FullName As String = TryCast(dr("UserFirstName"), String) & " " & TryCast(dr("UserLastName"), String)
EmailTools.Recievers.Add(New MailAddress(dr("UserEmail"), FullName))
Loop

EmailTools.SendEmail()

End Sub


امیدوارم مفید بوده باشه .
موفق باشید ...
سلام
این کدها فقط برای ایمیل هایی درست کار می کنه که در دامین تعریف شده اند، برای ارسال ایمیل به سایر ایمیل ها چه کار باید کرد؟

hakan648
سه شنبه 26 اردیبهشت 1391, 23:41 عصر
سلام

خیر دوست عزیز - میتونید به ایمیل های خارج از دامنه ی فعلی هم ایمیل ارسال کنید .
این کدی که بنده نوشتم در اصل کدی هست که در برنامه خودم استفاده کردم و بودن تغییر اینجا کپی کردمش ( که شاید نباید این کار رو میکردم )

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

موفق باشید ...

lyrebird
چهارشنبه 27 اردیبهشت 1391, 11:06 صبح
این کدی هست که من با C#‎‎‎‎ نوشتم:


public string SendEmail()
{
SmtpClient obj = new SmtpClient();
MailMessage Mailmsg = new MailMessage();
Mailmsg.To.Clear();

Recievers = new MailAddressCollection();
Recievers.Add(txtToAddress.Text);
SenderName = "Info";
SenderEmail = txtFromAddress.Text;
Subject = "subj";
Body = "body";
UseBcc = false;

if (UseBcc)
{
foreach (MailAddress RecieverItem in Recievers)
{
Mailmsg.Bcc.Add(RecieverItem);
}
}
else
{
foreach (MailAddress RecieverItem in Recievers)
{
Mailmsg.To.Add(RecieverItem);
}
}

Mailmsg.From = new MailAddress(SenderEmail, SenderName, System.Text.Encoding.UTF8);
Mailmsg.Subject = Subject;
Mailmsg.SubjectEncoding = Encoding.UTF8;
Mailmsg.BodyEncoding = System.Text.Encoding.UTF8;
Mailmsg.IsBodyHtml = false;

obj.Host = mail.domain.com;

System.Net.NetworkCredential BasicAuthenticationInfo = new System.Net.NetworkCredential("info@domain.com", "password");
obj.UseDefaultCredentials = false;
obj.Credentials = BasicAuthenticationInfo;
Mailmsg.Body = Body;
Mailmsg.IsBodyHtml = true;
try
{
obj.Send(Mailmsg);
return "sent";
}
catch (Exception ex)
{
return ex.ToString();
}
}

و فقط در صورتی که گیرنده ایمیل به صورت mail@domain.com هست ارسال میشن.
ممکنه اشکال از تنظیمات smtpClient من باشه،
obj.host رو به صورت mail.domain.com وارد کردم، و user و password یکی از اکانت هایی که در دامین ایجاد کرده ام دادم. اگه تو این قسمت نکته ای وجود داره لطفا راهنمایی کنید.
متشکرم.

(من کدهای دیگه رو هم امتحان کردم، متاسفانه از هیچ کدوم جواب نگرفتم و با ارورهای مختلفی مواجه شدم.)