在c#windows窗体中添加多个附件到邮件

时间:2014-05-03 22:10:04

标签: c# windows winforms email

我正在制作一个c#和Windows Forms(经典Windows应用程序,如记事本,油漆等)应用程序,它具有获取屏幕截图并通过邮件发送的功能。 但是,它现在只能拍摄6张照片(我可以添加更多,但我不想添加更多代码,我想以编程方式制作),如何使其发送更多或更少,如用户设置,外部应用程序?

Timer1发送邮件。 Timer2截图。 resimoran是一个int,它是调整大小的图像比例,默认为1。 counter是一个int, 它现在正在运作......

这是我的代码:

    private Bitmap Screenshot()
    {
        Bitmap Screenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
        Graphics GFX = Graphics.FromImage(Screenshot);
        GFX.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size);
        return Screenshot;
    }

    void SendReport()
    {
        MailMessage mail;
        var fromAddress = new MailAddress(frommail, fromname);
        var toAddress = new MailAddress(alici, aliciname);
        string fromPassword = mailpass;

        var smtp = new SmtpClient
        {
            Host = mailhostaddress,
            Port = mailport,
            EnableSsl = sslenabled,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = usedefaultcre,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
        };
        using (mail = new MailMessage(fromAddress, toAddress)
        {
            Subject = konu + DateTime.Now,
            Body = "None of your businness!"
        })
        {
            mail.Attachments.Add(attach1);
            mail.Attachments.Add(attach2);
            mail.Attachments.Add(attach3);
            mail.Attachments.Add(attach4);
            mail.Attachments.Add(attach5);
            mail.Attachments.Add(attach6);

                    smtp.Send(mail);
        }
    }

private void timer1_Tick(object sender, EventArgs e)
    {
        SendReport();
    }

    private void timer2_Tick(object sender, EventArgs e)
    {
        counter++;
        if (counter == 1)
        {
            Bitmap ekrangor = Screenshot();
            Bitmap imagee = resizeImage(ekrangor, new Size(ekrangor.Width / resimoran, ekrangor.Height / resimoran));
            imagee.Save(@"screen1.jpg");
            System.IO.Stream streamer = new System.IO.MemoryStream();
            imagee.Save(streamer, System.Drawing.Imaging.ImageFormat.Jpeg);
            streamer.Position = 0;
            attach1 = new Attachment(streamer, "screen1.jpg");
        }
        else if (counter == 2)
        {
            Bitmap ekrangor = Screenshot();
            Bitmap imagee = resizeImage(ekrangor, new Size(ekrangor.Width / resimoran, ekrangor.Height / resimoran));
            imagee.Save(@"screen2.jpg");
            System.IO.Stream streamer = new System.IO.MemoryStream();
            imagee.Save(streamer, System.Drawing.Imaging.ImageFormat.Jpeg);
            streamer.Position = 0;
            attach2 = new Attachment(streamer, "screen2.jpg");
        }
        else if (counter == 3)
        {
            Bitmap ekrangor = Screenshot();
            Bitmap imagee = resizeImage(ekrangor, new Size(ekrangor.Width / resimoran, ekrangor.Height / resimoran));
            imagee.Save(@"screen3.jpg");
            System.IO.Stream streamer = new System.IO.MemoryStream();
            imagee.Save(streamer, System.Drawing.Imaging.ImageFormat.Jpeg);
            streamer.Position = 0;
            attach3 = new Attachment(streamer, "screen3.jpg");
        }
        else if (counter == 4)
        {
            Bitmap ekrangor = Screenshot();
            Bitmap imagee = resizeImage(ekrangor, new Size(ekrangor.Width / resimoran, ekrangor.Height / resimoran));
            imagee.Save(@"screen4.jpg");
            System.IO.Stream streamer = new System.IO.MemoryStream();
            imagee.Save(streamer, System.Drawing.Imaging.ImageFormat.Jpeg);
            streamer.Position = 0;
            attach4 = new Attachment(streamer, "screen4.jpg");
        }
        else if (counter == 5)
        {
            Bitmap ekrangor = Screenshot();
            Bitmap imagee = resizeImage(ekrangor, new Size(ekrangor.Width / resimoran, ekrangor.Height / resimoran));
            imagee.Save(@"screen5.jpg");
            System.IO.Stream streamer = new System.IO.MemoryStream();
            imagee.Save(streamer, System.Drawing.Imaging.ImageFormat.Jpeg);
            streamer.Position = 0;
            attach5 = new Attachment(streamer, "screen5.jpg");
        }
        else if (counter == 6)
        {
            Bitmap ekrangor = Screenshot();
            Bitmap imagee = resizeImage(ekrangor, new Size(ekrangor.Width / resimoran, ekrangor.Height / resimoran));
            imagee.Save(@"screen6.jpg");
            System.IO.Stream streamer = new System.IO.MemoryStream();
            imagee.Save(streamer, System.Drawing.Imaging.ImageFormat.Jpeg);
            streamer.Position = 0;
            attach6 = new Attachment(streamer, "screen6.jpg");
            counter = 0;
        }
    }

public static Bitmap resizeImage(Bitmap imgToResize, Size size)
        {
            return (new Bitmap(imgToResize, size));
        }

而且,请用C#给我答案,而不是英文! (不是“这样做:MSDN bla bla”,但“试试这个虚空lolnocodezhere(){}”)

1 个答案:

答案 0 :(得分:2)

List<T>是你的朋友。

你将它声明在适当的地方

List<Attachment> attachments = new List<Attachment>();

然后你用一个

替换你的6个街区
attachments.Add(new Attachment(streamer, "screen.jpg");)

当合适的时间到来时,你会做一个

foreach(Attachment a in attachments ) mail.Attachments.Add(a);

成功发送邮件后,您可以删除这样的集合:

attachments.Clear();

由你来控制计数器,屏幕图像等等。

顺便说一下:mail.Attachments就是这样一个集合,也许你想直接使用它......?

相关问题