Visual Studio 2005에서 System.Web.Mail의 레거시 코드를 System.Net.Mail로 업데이트:이메일 전송 문제

StackOverflow https://stackoverflow.com/questions/52321

문제

더 이상 사용되지 않는 System.Web.Mail을 사용하여 이메일을 보내는 것은 잘 작동합니다. 코드 조각은 다음과 같습니다.

 Public Shared Sub send(ByVal recipent As String, ByVal from As String, ByVal subject As String, ByVal body As String)
        Try
            Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
            Message.To = recipent
            Message.From = from
            Message.Subject = subject
            Message.Body = body
            Message.BodyFormat = MailFormat.Html
            Try
                SmtpMail.SmtpServer = MAIL_SERVER
                SmtpMail.Send(Message)
            Catch ehttp As System.Web.HttpException
                critical_error("Email sending failed, reason: " + ehttp.ToString)
            End Try
        Catch e As System.Exception
            critical_error(e, "send() in Util_Email")
        End Try
    End Sub

업데이트된 버전은 다음과 같습니다.

Dim mailMessage As New System.Net.Mail.MailMessage()

        mailMessage.From = New System.Net.Mail.MailAddress(from)
        mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))

        mailMessage.Subject = subject
        mailMessage.Body = body

        mailMessage.IsBodyHtml = True
        mailMessage.Priority = System.Net.Mail.MailPriority.Normal

        Try

            Dim smtp As New Net.Mail.SmtpClient(MAIL_SERVER)
            smtp.Send(mailMessage)

        Catch ex As Exception

            MsgBox(ex.ToString)

        End Try

다양한 변형을 시도했지만 아무것도 작동하지 않는 것 같습니다. SmtpClient와 관련이 있을 수 있다는 느낌이 듭니다. 이 버전 사이의 기본 코드에 변경된 사항이 있습니까?

다시 던져지는 예외는 없습니다.

도움이 되었습니까?

해결책

귀하의 코드를 테스트했으며 메일이 성공적으로 전송되었습니다.이전 코드에 대해 동일한 매개변수를 사용한다고 가정하면 메일 서버(MAIL_SERVER)가 메시지를 수락하고 처리가 지연되거나 스팸으로 간주되어 삭제되는 것이 좋습니다.

제3의 방법(용감하다면 텔넷)을 사용하여 메시지를 보내고 그것이 성공했는지 확인하는 것이 좋습니다.

편집하다:나는 (귀하의 후속 답변에서) 포트를 지정하는 것이 어느 정도 도움이 되었다고 지적합니다.포트 25(SMTP) 또는 포트 587(제출) 또는 다른 것을 사용하고 있는지 말하지 않았습니다.아직 수행하지 않은 경우 Sumission 포트를 사용하면 문제 해결에 도움이 될 수도 있습니다.

위키피디아 그리고 RFC4409 자세한 내용이 있습니다.

다른 팁

System.Net.Mail 라이브러리는 구성 파일을 사용하여 설정을 저장하므로 다음과 같은 섹션을 추가하면 됩니다.

  <system.net>
    <mailSettings>
      <smtp from="test@foo.com">
        <network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
      </smtp>
    </mailSettings>
  </system.net>

추가해 보셨나요?

smtp.UseDefaultCredentials = True 

보내기 전에?

또한 다음을 변경하려고 하면 어떻게 되나요?

mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))

이에:

mailMessage.From = New System.Net.Mail.MailAddress(from,recipent)

-- 케빈 페어차일드

이메일에 대한 자격 증명을 설정하고 있습니까?

smtp.Credentials = New Net.NetworkCredential("xyz@gmail.com", "password")

이 오류가 발생했지만 예외가 발생했다고 생각합니다.

당신이하고있는 모든 일은 정확합니다.제가 확인할 사항은 다음과 같습니다.

  1. IIS의 SMTP 서비스가 올바르게 실행되고 있는지 다시 확인하세요.
  2. 스팸으로 표시되지 않는지 확인하세요.

이는 일반적으로 이메일 전송에 문제가 있을 때마다 가장 큰 원인입니다.

또한 방금 MsgBox(ex.Message)를 수행하고 있음을 확인했습니다.나는 그들이 서비스 팩에서 MessageBox가 asp.net을 작동하는 것을 차단했다고 생각합니다. 그래서 오류가 발생할 수도 있고, 여러분은 그것을 모를 수도 있습니다.이벤트 로그를 확인하세요.

메일 서버용 포트 번호를 추가했는데 간헐적으로 작동하기 시작했는데 서버 문제로 인해 메시지 전송이 지연된 것 같습니다.답변해 주셔서 감사합니다. 모두 도움이 되었습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top