C# 如何使用图像附件向多个ID发送邮件?
我正在向这4个ID发送邮件以及图像附件 带有图像的文本将到达所有4个EmailID 仅为emailid显示图像(大小700kb)Xyz@gmail.com但对于其余部分,emailids文本正在显示。图像也已到达,但未打开(显示)(图像大小(171B)(实际大小700kb)) 仅对于第一个emailid,尝试从邮件中打开图像时会显示图像 所有4个EmailID都有4个foreach循环 尝试打开图像时,我得到以下信息: 代码: 下面的代码在尝试打开附加的图像时显示邮件中的图像Xyz@gmail.comC# 如何使用图像附件向多个ID发送邮件?,c#,C#,我正在向这4个ID发送邮件以及图像附件 带有图像的文本将到达所有4个EmailID 仅为emailid显示图像(大小700kb)Xyz@gmail.com但对于其余部分,emailids文本正在显示。图像也已到达,但未打开(显示)(图像大小(171B)(实际大小700kb)) 仅对于第一个emailid,尝试从邮件中打开图像时会显示图像 所有4个EmailID都有4个foreach循环 尝试打开图像时,我得到以下信息: 代码: 下面的代码在尝试打开附加的图像时显示邮件中的图像Xyz@gmail
Email------>Say Xyz@gmail.com
Email1----->Say Abc@gmail.com
Email2----->Say cid@gmail.com
Email3----->Say wer@gmail.com
foreach (string email in emails)
{
string SendEmail = email;
idno = idno + 1;
try
{
MailMessage message = new MailMessage(from, SendEmail, txtsubject.Text, myString);
message.From = new MailAddress(from, fromname);
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
message.Headers.Add("Disposition-Notification-To", from);
message.IsBodyHtml = true;
if (fuAttach.HasFile)
{
filename = Path.GetFileName(fuAttach.PostedFile.FileName);
fuAttach.SaveAs(Server.MapPath("~/expo_crm/Attachments/" + filename));
Attachment data = new Attachment(fuAttach.PostedFile.InputStream, filename);
message.Attachments.Add(data);
}
smtp.Send(message);
object userid = user_ids[idno];
// int tst = Convert.ToInt(userid);
// int uid = Convert.ToInt16(user_ids[idno]);
Int32 uid = Convert.ToInt32(user_ids[idno]);
sent_user_ids.Add(uid);
}
catch (Exception ex)
{
errorno++;
object userid = user_ids[idno];
// int tst = Convert.ToInt(userid);
// int uid = Convert.ToInt16(user_ids[idno]);
Int32 uid = Convert.ToInt32(user_ids[idno]);
Notsent_user_ids.Add(uid);
}
}
下面的代码不显示邮件中的图像Abc@gmail.com
Email------>Say Xyz@gmail.com
Email1----->Say Abc@gmail.com
Email2----->Say cid@gmail.com
Email3----->Say wer@gmail.com
foreach (string email in emails)
{
string SendEmail = email;
idno = idno + 1;
try
{
MailMessage message = new MailMessage(from, SendEmail, txtsubject.Text, myString);
message.From = new MailAddress(from, fromname);
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
message.Headers.Add("Disposition-Notification-To", from);
message.IsBodyHtml = true;
if (fuAttach.HasFile)
{
filename = Path.GetFileName(fuAttach.PostedFile.FileName);
fuAttach.SaveAs(Server.MapPath("~/expo_crm/Attachments/" + filename));
Attachment data = new Attachment(fuAttach.PostedFile.InputStream, filename);
message.Attachments.Add(data);
}
smtp.Send(message);
object userid = user_ids[idno];
// int tst = Convert.ToInt(userid);
// int uid = Convert.ToInt16(user_ids[idno]);
Int32 uid = Convert.ToInt32(user_ids[idno]);
sent_user_ids.Add(uid);
}
catch (Exception ex)
{
errorno++;
object userid = user_ids[idno];
// int tst = Convert.ToInt(userid);
// int uid = Convert.ToInt16(user_ids[idno]);
Int32 uid = Convert.ToInt32(user_ids[idno]);
Notsent_user_ids.Add(uid);
}
}
我不知道第二个
foreach
循环有什么问题,我在这里没有提供的另外两个foreach
循环也是如此。我认为问题在于,您一遍又一遍地从同一个流中读取数据,除非在第一次尝试之后,您从流的末尾读取数据,因此没有数据
一个快速解决方案是在发送每封电子邮件之前查找流的开头:
idno = -1;
foreach (string email in emails1)
{
string MyEmail1 = email;
idno = idno + 1;
if (MyEmail1 != "N/A")
{
try
{
MailMessage message = new MailMessage(from, MyEmail1, txtsubject.Text, myString);
message.From = new MailAddress(from, fromname);
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
message.Headers.Add("Disposition-Notification-To", from);
message.IsBodyHtml = true;
if (fuAttach.HasFile)
{
filename = Path.GetFileName(fuAttach.PostedFile.FileName);
fuAttach.SaveAs(Server.MapPath("~/expo_crm/Attachments/" + filename));//added by chetan
Attachment data = new Attachment(fuAttach.PostedFile.InputStream, filename);
message.Attachments.Add(data);
}
smtp.Send(message);
sent1++;
}
catch (Exception ex)
{
object userid = user_ids[idno];
// int tst = Convert.ToInt(userid);
// int uid = Convert.ToInt16(user_ids[idno]);
Int32 uid = Convert.ToInt32(user_ids[idno]);
notsend1.Add(uid);
}
}
}
如果您曾经使代码并行(即多线程),请注意,您将无法使用单个流来实现此目的。还请注意,并非所有流都是可查找的(您可以检查它们的CanSeek
属性)
如果处理的是不可查找的流,则可以(取决于文件大小、内存限制等)将其复制到
MemoryStream
或将其保存到文件中,并为每封电子邮件读取该文件。请参阅。我认为问题在于,您一遍又一遍地从同一个流中读取数据,除非在第一次尝试后,您从流的末尾读取数据,因此无法获得任何数据
一个快速解决方案是在发送每封电子邮件之前查找流的开头:
idno = -1;
foreach (string email in emails1)
{
string MyEmail1 = email;
idno = idno + 1;
if (MyEmail1 != "N/A")
{
try
{
MailMessage message = new MailMessage(from, MyEmail1, txtsubject.Text, myString);
message.From = new MailAddress(from, fromname);
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
message.Headers.Add("Disposition-Notification-To", from);
message.IsBodyHtml = true;
if (fuAttach.HasFile)
{
filename = Path.GetFileName(fuAttach.PostedFile.FileName);
fuAttach.SaveAs(Server.MapPath("~/expo_crm/Attachments/" + filename));//added by chetan
Attachment data = new Attachment(fuAttach.PostedFile.InputStream, filename);
message.Attachments.Add(data);
}
smtp.Send(message);
sent1++;
}
catch (Exception ex)
{
object userid = user_ids[idno];
// int tst = Convert.ToInt(userid);
// int uid = Convert.ToInt16(user_ids[idno]);
Int32 uid = Convert.ToInt32(user_ids[idno]);
notsend1.Add(uid);
}
}
}
如果您曾经使代码并行(即多线程),请注意,您将无法使用单个流来实现此目的。还请注意,并非所有流都是可查找的(您可以检查它们的CanSeek
属性)
如果处理的是不可查找的流,则可以(取决于文件大小、内存限制等)将其复制到
MemoryStream
或将其保存到文件中,并为每封电子邮件读取该文件。请参阅。@John..是的..我试图查看图像,但它没有显示…我只是再次读取了您的代码。你能告诉我第二次迭代(即第二封电子邮件)的fuAttach.PostedFile.InputStream.Position的值是多少吗?@John它显示了一些数字726414@John我应该共享Sendmail的完整代码吗?@John..是的..我试图查看图像,但它没有显示…我只是再次阅读了您的代码。你能告诉我第二次迭代(即第二封电子邮件)的fuAttach.PostedFile.InputStream.Position的值是多少吗?@John它显示了一些数字726414@John我应该共享Sendmail的完整代码吗?