首页 > 解决方案 > 使用 VB.net 发送带附件的电子邮件

问题描述

我知道这是一个老问题或问题,但你能帮我解决这个问题吗?

我在互联网上找到了可以通过电子邮件发送附件的源代码。我在我的应用程序中尝试过,但出现此错误。

System.Web.HttpException (0x8000405) Invalid mail attachment C:\File.pdf  
at System.Web.Mail.MailAttachment.VerifyFile() 
at System.Web.Mail.Attachment..ctor(String filename)

这是我找到的代码

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.Web.Mail
Public Class ReportsForm
    Dim cryRpt As New ReportDocument
    Dim pdfFile As String = "C:\File.pdf"
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        cryRpt.Load("Crystal Report Path here")
        CrystalReportViewer1.ReportSource = cryRpt
        CrystalReportViewer1.Refresh()
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Try
            Dim CrExportOptions As ExportOptions
            Dim CrDiskFileDestinationOptions As New  _
            DiskFileDestinationOptions()
            Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions
            CrDiskFileDestinationOptions.DiskFileName = pdfFile
            CrExportOptions = cryRpt.ExportOptions
            With CrExportOptions
                .ExportDestinationType = ExportDestinationType.DiskFile
                .ExportFormatType = ExportFormatType.PortableDocFormat
                .DestinationOptions = CrDiskFileDestinationOptions
                .FormatOptions = CrFormatTypeOptions
            End With
            cryRpt.Export()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        sendMail()
    End Sub
    Private Sub sendMail()
        Try
            Dim Smtp As SmtpMail
            SmtpMail.SmtpServer.Insert(0, "hostname")
            Dim Msg As MailMessage = New MailMessage
            Msg.To = "to address"
            Msg.From = "from address"
            Msg.Subject = "Crystal Report Attachment "
            Msg.Body = "Crystal Report Attachment "
            Msg.Attachments.Add(New MailAttachment(pdfFile))
            SmtpMail.Send(Msg)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
End Class

谢谢

标签: vb.netcrystal-reports

解决方案


我认为问题在于您的 pdf 附件文件。您将需要一个安全的地方来创建它。您将使用以下代码创建附件文件路径和名称:

Dim pdfFile As String = System.IO.Path.GetTempPath & "File.pdf"
If System.IO.File.Exists(pdfFile) Then My.Computer.FileSystem.DeleteFile(pdfFile)

然后,您只需使用一行代码即可将 cryRpt 对象导出为 pdf 文件:

cryRpt.ExportToDisk(ExportFormatType.PortableDocFormat, pdfFile)

如果没有发生异常,您的附件已创建并准备好邮寄。


推荐阅读