Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用图像附件向多个ID发送邮件?_C# - Fatal编程技术网

C# 如何使用图像附件向多个ID发送邮件?

C# 如何使用图像附件向多个ID发送邮件?,c#,C#,我正在向这4个ID发送邮件以及图像附件 带有图像的文本将到达所有4个EmailID 仅为emailid显示图像(大小700kb)Xyz@gmail.com但对于其余部分,emailids文本正在显示。图像也已到达,但未打开(显示)(图像大小(171B)(实际大小700kb)) 仅对于第一个emailid,尝试从邮件中打开图像时会显示图像 所有4个EmailID都有4个foreach循环 尝试打开图像时,我得到以下信息: 代码: 下面的代码在尝试打开附加的图像时显示邮件中的图像Xyz@gmail

我正在向这4个ID发送邮件以及图像附件

带有图像的文本将到达所有4个EmailID

仅为emailid显示图像(大小700kb)Xyz@gmail.com但对于其余部分,emailids文本正在显示。图像也已到达,但未打开(显示)(图像大小(171B)(实际大小700kb))

仅对于第一个emailid,尝试从邮件中打开图像时会显示图像

所有4个EmailID都有4个foreach循环

尝试打开图像时,我得到以下信息:

代码:

下面的代码在尝试打开附加的图像时显示邮件中的图像Xyz@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);
                }
            }
下面的代码不显示邮件中的图像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的完整代码吗?