2013-07-13 113 views
0

我在这个问题上搜索了几天,并在本网站和其他人上引用了很多问题,都无济于事。除此之外,我还有其他所有功能都可以使用。我也引用了Visual Studio中出现的工具提示,但似乎没有任何效果。我的代码不会生成错误,但电子邮件也没有附件。这是我的一段代码作为参考。如何在vb.net的电子邮件中添加附件或附件

'Add Attachments from alist array' 
If alist.Count > 1 Then 
    For x As Integer = 1 To alist.Count - 1 
     Quick_Mail.email.Attachments.Add(New System.Net.Mail.Attachment(alist(x).ToString)) 
    Next 
End If 

我有这种方式,因为我有一个单独的窗体,添加附件。附件的路径以字符串形式存储在alist数组中。每次添加新附件时,alist都会保留。这使得第一位置是空的这就是为什么我初始化x到1

这里是我的电子邮件设置

Public Shared email As New MailMessage() 
Dim smtp As SmtpClient = New SmtpClient 
smtp.Credentials = New Net.NetworkCredential(user, pass) 
smtp.Host = host 
smtp.Port = port 
smtp.EnableSsl = False 
email = New MailMessage() 
email.From = New MailAddress(user) 
email.To = txt_to.text 
email.CC = txt_cc.text 
email.BCC = txt_bcc.text 
email.Subject = txt_subject.Text 
email.Body = txt_message.Text 

我有电子邮件作为公共其余代码和共享,所以附件形式可以参考它。

任何帮助,非常感谢。提前致谢。

+0

采用单个字符串的'Attachment'构造函数需要一个文件路径。那是你在传递什么?它是应用程序有权访问的位置吗? – Oded

+0

我传递一个字符串,如“C:\ Users \ Public \ Documents \ text.txt”我试过使用我的用户帐户,公共帐户和直接关闭C驱动器中的文件。什么都没有 – ZeverMX

回答

0

我想你可以调用循环在发送邮件的代码之前添加附件。如果是这种情况,那么你再重新初始化变量的电子邮件,你失去了以前的附件

Public Shared email As New MailMessage() 
Dim smtp As SmtpClient = New SmtpClient 
smtp.Credentials = New Net.NetworkCredential(user, pass) 
smtp.Host = host 
smtp.Port = port 
smtp.EnableSsl = False 
' THIS LINE REINITIALIZE THE EMAIL AND KILLS THE ATTACHMENTS 
' email = New MailMessage() 
email.From = New MailAddress(user) 
email.To = txt_to.text 
email.CC = txt_cc.text 
email.BCC = txt_bcc.text 
email.Subject = txt_subject.Text 
email.Body = txt_message.Text 

但是保持一个共享变量对于这类问题将始终是一个问题。为什么不将这些代码分离出来并将附件列表传递给这个子组,避免让共享变量暴露出来?

Public Sub SendMail(alist as List(Of String)) 
    Dim email = New MailMessage() 
    Dim smtp = New SmtpClient() 

    For x As Integer = 1 To alist.Count - 1 
     email.Attachments.Add(New Attachment(alist(x).ToString)) 
    Next 

    smtp.Credentials = New Net.NetworkCredential(user, pass) 
    smtp.Host = host 
    smtp.Port = port 
    smtp.EnableSsl = False 
    email.From = New MailAddress(user) 
    email.To = txt_to.text 
    email.CC = txt_cc.text 
    email.BCC = txt_bcc.text 
    email.Subject = txt_subject.Text 
    email.Body = txt_message.Text 
    smtp.Send(email) 
End Sub 
+0

电子邮件是一个全局的公共共享变量,所以电子邮件没有得到重新初始化。我试图制作一个公共子组件,它添加附件并从额外的窗体调用它,但这也不起作用。我甚至尝试过对附件进行硬编码,但那并不奏效。 – ZeverMX

+0

电子邮件=新的MailMessage将重新初始化共享变量,并这样做,你失去了附件。您可以使用调试器并在 – Steve

+0

之前和之后检查Attachements集合。谢谢,那就是问题所在。 – ZeverMX