在 VB 中使用队列的邮件附件
Mail attachment using queue in VB
我正在尝试在我的邮件系统中使用队列来发送多个附件。
这个想法是,每次用户附加文件时,文件都会保存到一个变量中,然后将该变量推送到队列中。多个附件意味着更大的队列。我假设我可以将队列附加到电子邮件并发送它,但是当我尝试这样做时,我收到错误消息“(68) 'System.Collections.Queue' 类型的值无法转换为 'System.Net.Mail.Attachment'。”
我怎样才能解决这个问题?或者有没有其他方法可以发送多个附件?我绝对需要使用队列或堆栈,因为这是一个大学项目,我必须使用两者之一。我包含了在用户单击 'send mail' 按钮后运行的代码。
If (String.IsNullOrEmpty(ToMail.Text) OrElse RegexClass.MailRegex(ToMail.Text)) Then
MessageBox.Show("Please enter a valid email address")
Else
Try
mail.From = New MailAddress(My.Settings.SaveMailID)
mail.To.Add(ToMail.Text)
mail.Body = MailBody.Text
mail.Subject = MailSubject.Text
mail.Priority = MailPriority.Normal
Dim smtpserver As New SmtpClient(My.Settings.SMTP, My.Settings.Port)
smtpserver.Credentials = New Net.NetworkCredential(My.Settings.SaveMailID, My.Settings.SaveMailPass)
If My.Settings.SMTP = "smtp.gmail.com" And My.Settings.Port = "25" Then
smtpserver.EnableSsl = True
End If
smtpserver.Port = My.Settings.Port
smtpserver.Host = My.Settings.SMTP
If Not Attachbox.Text = Nothing Then
Dim attach As New Attachment(Attachbox.Text)
mail.Attachments.Add(attach)
End If
If Not CCBox.Text = Nothing Then
mail.CC.Add(CCBox.Text)
End If
If Not BCCBox.Text = Nothing Then
mail.Bcc.Add(BCCBox.Text)
End If
smtpserver.Send(mail)
Label7.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
注意这些关键行:
Dim attach As New Attachment(Attachbox.Text)
mail.Attachments.Add(attach)
您将无法直接附加 Queue,因为它不是正确的类型(它需要一个 Attachment 对象)。但是,您可以遍历队列或堆栈并在循环中使用这两行来创建附件,然后将其添加到附件列表中。
由于这是家庭作业,我试图表达得有些模糊,但如果您有任何其他问题,请告诉我。
附件 class 中有一份 MSDN 文档:
https://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.attachments(v=vs.110).aspx
下面是循环队列的示例:
For Each element As String In queue
Console.WriteLine(element)
您需要这样做而不是写入控制台,而是创建一个附件并将其添加到邮件对象的附件列表中。
我正在尝试在我的邮件系统中使用队列来发送多个附件。 这个想法是,每次用户附加文件时,文件都会保存到一个变量中,然后将该变量推送到队列中。多个附件意味着更大的队列。我假设我可以将队列附加到电子邮件并发送它,但是当我尝试这样做时,我收到错误消息“(68) 'System.Collections.Queue' 类型的值无法转换为 'System.Net.Mail.Attachment'。” 我怎样才能解决这个问题?或者有没有其他方法可以发送多个附件?我绝对需要使用队列或堆栈,因为这是一个大学项目,我必须使用两者之一。我包含了在用户单击 'send mail' 按钮后运行的代码。
If (String.IsNullOrEmpty(ToMail.Text) OrElse RegexClass.MailRegex(ToMail.Text)) Then
MessageBox.Show("Please enter a valid email address")
Else
Try
mail.From = New MailAddress(My.Settings.SaveMailID)
mail.To.Add(ToMail.Text)
mail.Body = MailBody.Text
mail.Subject = MailSubject.Text
mail.Priority = MailPriority.Normal
Dim smtpserver As New SmtpClient(My.Settings.SMTP, My.Settings.Port)
smtpserver.Credentials = New Net.NetworkCredential(My.Settings.SaveMailID, My.Settings.SaveMailPass)
If My.Settings.SMTP = "smtp.gmail.com" And My.Settings.Port = "25" Then
smtpserver.EnableSsl = True
End If
smtpserver.Port = My.Settings.Port
smtpserver.Host = My.Settings.SMTP
If Not Attachbox.Text = Nothing Then
Dim attach As New Attachment(Attachbox.Text)
mail.Attachments.Add(attach)
End If
If Not CCBox.Text = Nothing Then
mail.CC.Add(CCBox.Text)
End If
If Not BCCBox.Text = Nothing Then
mail.Bcc.Add(BCCBox.Text)
End If
smtpserver.Send(mail)
Label7.Show()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
注意这些关键行:
Dim attach As New Attachment(Attachbox.Text)
mail.Attachments.Add(attach)
您将无法直接附加 Queue,因为它不是正确的类型(它需要一个 Attachment 对象)。但是,您可以遍历队列或堆栈并在循环中使用这两行来创建附件,然后将其添加到附件列表中。
由于这是家庭作业,我试图表达得有些模糊,但如果您有任何其他问题,请告诉我。
附件 class 中有一份 MSDN 文档: https://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.attachments(v=vs.110).aspx
下面是循环队列的示例:
For Each element As String In queue
Console.WriteLine(element)
您需要这样做而不是写入控制台,而是创建一个附件并将其添加到邮件对象的附件列表中。