读书人

C# 自代mail发送邮件的有关问题

发布时间: 2012-01-26 19:40:46 作者: rapoo

C# 自代mail发送邮件的问题
private void timeSendMsg_Tick(object sender, EventArgs e)
{
string topic = string.Empty;
string content = string.Empty;
string email= string.Empty;
foreach (DataGridViewRow row in gvMain.Rows)
{
topic = row.Cells[ "topic "].Value.ToString();
content = row.Cells[ "content "].Value.ToString();
MailSender.sendMail(topic, content, email);
MessageDAO.updateSendFlag(row.Cells[ "ID "].Value.ToString());
}
lbMessage.Items.Add( "发送成功 " + gvMain.Rows.Count + "条 ");
bindData();
}
public static bool sendMail(string strSubject,string content,string eMailAddress) {
if (eMailAddress.Length < 2)
{
return false;
}
bool hasSend = true;
string strSMTPServer = ConfigurationSettings.AppSettings[ "smtpAddress "];
string strSMTPUser = ConfigurationSettings.AppSettings[ "smtpUser "];
string strSMTPPassword = ConfigurationSettings.AppSettings[ "smtpPassword "];
string strFrom = strSMTPUser;
SmtpClient client = new SmtpClient(strSMTPServer);
client.Credentials = new NetworkCredential(strFrom, strSMTPPassword);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
MailMessage message = new MailMessage();


message.From = new MailAddress(strFrom);
message.Subject = strSubject;
message.Body = content;
message.To.Add(eMailAddress);
message.SubjectEncoding = Encoding.UTF8;
message.BodyEncoding = Encoding.UTF8;
message.IsBodyHtml = true;
try
{
client.Send(message);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return false;
}
return hasSend;
}
我在timer控件中设置了每天发送一次,如果发送信息少的话 比如100条以下发送很正常 超过300条的程序就会没有响应了 这里是不是需要用到线程方面的知识啊 请各位指教啊 分不够可以加

[解决办法]
在foreach 循环中作适当的延时试试,
如果可能,还是用线程好
[解决办法]
可以将Thread.Sleep(50);Application.DoEvent();加入foreach语句中做适当延迟
[解决办法]
我觉得这可能是smtp服务器的问题,和程序无关?
lz用的smtp服务器是自己配的?
[解决办法]
建议你使用线程发送邮件。

发送邮件的过程中,连接smtp服务器是一件费时的工作。你的过程中还有连接数据库服务器的代码,这些都会引起主线程忙碌。

你可以在单独的线程中运行你在timer_tick过程中的代码,当邮件发完后,通知一下主线程即可。

读书人网 >C#

热点推荐