使用asp.net发送电子邮件时出错('至少需要其中一个字段From或To')

时间:2013-10-07 12:30:53

标签: asp.net vb.net

我正在尝试使用asp.net发送电子邮件。这是我到目前为止所得到的:

objEmail = New Email

                With objEmail
                    If (IsDBNull(rsConfigEmail.Fields("smtp").Value)) Then
                        Dim sSmtp As String = CarregarSMTP()

                        If (sSmtp = "") Then
                            'Throw New Exception("Não existem SMTPs cadastrados.")
                            MsgBox.Disparar("Erro ao enviar email. SMTP não cadastrado.")
                            Exit Sub
                        End If

                        .SMTP = sSmtp
                    Else
                        .SMTP = rsConfigEmail.Fields("smtp").Value
                    End If
                    .Remetente = Trim(rsConfigEmail.Fields("Remetente").Value)
                    .Titulo = Trim(rsConfigEmail.Fields("assunto").Value)
                    .Destinatario = sEmail

                    corpoEmail = rsConfigEmail.Fields("Mensagem").Value.ToString()

                    corpoEmail = corpoEmail.Replace("<guia>", sGuia)
                    corpoEmail = corpoEmail.Replace("<origem>", dplOrgao.SelectedItem.Text)
                    corpoEmail = corpoEmail.Replace("<destino>", Trim(rsDadosEmail.Fields("sigla").Value.ToString()) + " - " + Trim(rsDadosEmail.Fields("descricao").Value.ToString()))

                    Dim tabela As String = ""
                    tabela += "<table width='100%'><tr><td>Número Processo</td><td>Número Documento Origem</td><td>Assunto</td><td>Complemento</td><td>Interessado</td><td>Parecer</td></tr>"
                    Do While Not rsConfirmados.EOF
                        tabela += "<tr><td>" + rsConfirmados.Fields(0).Value.ToString() + "</td><td>" + rsConfirmados.Fields(1).Value.ToString() + "</td><td>" + rsConfirmados.Fields(2).Value.ToString() + "</td><td>" + rsConfirmados(3).Value.ToString() + "</td><td>" + rsConfirmados.Fields(4).Value.ToString() + "</td><td>" + rsConfirmados.Fields(5).Value.ToString() + "</td></tr>"
                        rsConfirmados.MoveNext()
                    Loop
                    tabela += "</table>"

                    corpoEmail = corpoEmail.Replace("<corpo>", tabela)
                    corpoEmail = corpoEmail.Replace("<total>", rsConfirmados.RecordCount.ToString())

                    .Mensagem = corpoEmail
                    .Enviar()


                End With

当调用'Enviar'方法(Send())时,会抛出一个异常,说至少需要一个字段'from'或'to'。但是当我这样做时,我正在为这些属性设置值:

.Remetente = Trim(rsConfigEmail.Fields("Remetente").Value)
 .Destinatario = sEmail

分别来自From和To字段。我的smtp地址可能有问题吗?

这是我的电子邮件类中的Enviar()方法:

Public Sub Enviar()
            Dim mail As MailMessage
            Dim TemDestinatario As Boolean

            Try

                If sSMTP.Trim <> "" Then
                    SmtpMail.SmtpServer = sSMTP
                Else
                    Throw New Exception("Falta o SMTP.")
                End If

                mail = New MailMessage

                If sRemetente <> "" Then
                    mail.From = sRemetente
                Else
                    Throw New Exception("Falta o Remetente.")
                End If

                TemDestinatario = False
                If sDestinatario <> "" Then
                    mail.To = sDestinatario
                    TemDestinatario = True
                End If
                If sDestinatarioCCO <> "" Then
                    mail.Bcc = sDestinatarioCCO
                    TemDestinatario = True
                End If
                If Not TemDestinatario Then
                    Throw New Exception("Falta o Destino.")
                End If

                mail.Subject = sTitulo
                mail.Body = sTexto
                mail.BodyEncoding = System.Text.Encoding.UTF8
                mail.BodyFormat = MailFormat.Text

                If Not vetAnexo Is Nothing AndAlso UBound(vetAnexo) > 0 Then
                    Dim intContador As Integer
                    For intContador = 0 To UBound(vetAnexo) - 1
                        mail.Attachments.Add(New MailAttachment(vetAnexo(intContador)))
                    Next
                End If

                'se houver algum problema no envio, tenta outros SMTPs
                Try
                    SmtpMail.Send(mail)
                Catch ex As Exception
                    Dim cSig As Object
                    Dim rsSmtp As ADODB.Recordset

                    cSig = CreateObject("prSIG.cSMTP")

                    rsSmtp = cSig.ConsultarSMTP()

                    If (rsSmtp.RecordCount > 0) Then
                        Dim bEnviado As Boolean

                        'pega todos menos o que ja tentou, e ordena pela 'ordem'
                        rsSmtp.Filter = "smtp <> '" + SmtpMail.SmtpServer + "'"
                        rsSmtp.Sort = "ordem"

                        rsSmtp.MoveFirst()

                        Do While Not rsSmtp.EOF And Not bEnviado
                            Try
                                SmtpMail.SmtpServer = rsSmtp.Fields("smtp").Value
                                SmtpMail.Send(mail)
                                bEnviado = True
                            Catch
                            End Try

                            rsSmtp.MoveNext()
                        Loop

                        If (Not bEnviado) Then
                            Throw ex
                        End If
                    Else
                        Throw ex
                    End If

                End Try

            Catch ex As Exception
                If ex.Message = "Could not access 'CDO.Message' object." Then
                    Throw New Exception("Falha ao acessar o SMTP (" + sSMTP + ").")
                Else
                    Throw ex
                End If
            Finally
                mail = Nothing
            End Try
        End Sub

1 个答案:

答案 0 :(得分:0)

我的两个SMTP地址都无法正常工作。不得不要求另一个SMTP地址。现在它有效。