0

我正在尝试使用 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
4

1 回答 1

0

我的两个 SMTP 地址都不起作用。不得不要求另一个STMP地址。现在它起作用了。

于 2013-10-07T18:31:58.057 回答