关于将文件附加到邮件附件的问题

沙欣

新成员
已加入
2020年12月13日
留言内容
1
编程经验
Beginner
您好,

我正在使用Windows Form开发桌面应用程序。在打开的第一个表单中,用户填写该表单并添加附件(pdf,word等),然后保存并退出。我将此添加文件的文件路径保存在sql服务器中。

然后,将批准的用户进入程序并批准创建的表单。获得批准后,会将表格通过电子邮件发送给相关人员。问题是我无法将以第一种形式添加的文件添加到邮件中。这样邮件就可以了,但是我无法发送附件。

我的代码如下;

我的文件添加按钮(我将文件路径放入文本框,然后将其保存到sql服务器。)
C#:
private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog dosya = new OpenFileDialog();
            dosya.Filter = "Tüm Dosyalar | *.*";
            dosya.ShowDialog();
            
            
            string dosyayolu = dosya.FileName;
            string yeniyol = @"\\DOSYA YOLUM" + Guid.NewGuid().ToString();
            File.Copy(dosyayolu, yeniyol);



            textBoxDosyaYolu.Text = Path.GetFileName(yeniyol);


        }
我的邮件发送代码(我的文件附加字段在表格1上,我的电子邮件发送过程在表格2上);
C#:
public void mailGonderDenetci()
        {
            string[] mails = textBoxDenetciMailAdresleri.Text.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries);

            MailMessage mesaj = new MailMessage();//mesaj degiskenimiz, göndecegimiz e-posta mızın bütün elemanlarini bulundurmaktadir
            mesaj.From = new MailAddress("MAİL ADRESİM");//mesaj gönderen adres
            SmtpClient smtp = new SmtpClient(); //E-Posta’yi gönderen kullanicinin kimlik bilgilerini tutar
            foreach (var mail in mails)
            {
                mesaj.To.Add(mail);//mail gönderilcek mesaj adresi
            }


            mesaj.IsBodyHtml = true;
            mesaj.Subject = "DENETÇİ OLARAK ATANDINIZ."; //Mail Konusu

            mesaj.Attachments.Clear(); // mail eklerini temizledik
             Attachment attachment;
            attachment = new Attachment("@textBoxDosyaYolu.Text"); //burada ilk formda eklenen dosya yolunu formda textbox ekleyerek yeniden çağırdım
            mesaj.Attachments.Add(attachment);


            string htmlString = getHtml(dataGridView2);  //Mail İçeriği
            mesaj.Body =  htmlString;

            smtp.Credentials = new System.Net.NetworkCredential("MAİL ADRESİM", "ŞİFREM");//Mail gönderen hesabın kullanıcı adı ve şifresi
            smtp.Port = 587; //SMTP sunucusunun port bilgisini tutar.
            smtp.Host = "smtp.office365.com"; // SMTP sunucusunun isim bilgisini tutar.
            smtp.EnableSsl = true;  //:Sunucu SSL istiyorsa bu degeri true yapacagiz. smtp.EnableSsl = true;
            smtp.Send(mesaj); //Maili gönderme islemini yapar.
        }

预先非常感谢您,祝您工作愉快。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,504
地点
悉尼,澳大利亚
编程经验
10+
文件的路径实际存储在哪里?这没有任何意义:
C#:
attachment = new Attachment("@textBoxDosyaYolu.Text");
The argument for that constructor is supposed to be the path of the file to attach. How is that literal value a file path? If you're actually trying to get the path from the same TextBox that you put it, why aren't you referring to the TextBox the same way you did when you put it in? Did you do this:
C#:
"@textBoxDosyaYolu.Text" = Path.GetFileName(yeniyol);
不,你没有。如果您没有以这种方式引用它,那么为什么要以这种方式引用它呢?

That said, I'm not even sure that that would work anyway, if the two methods are on different forms. Surely you should be storing the relevant data somewhere with the code in the first form, then reading it from that same location in the second form. Also, you need the path of the file, not just the name, to create the Attachment. It has to know where to find the file, not just what it's called. Also, you should be disposing Attachment objects after sending the message.
 
最佳 底部