C#으로 작성된 클라이언트 응용 프로그램을 사용하여 대량 메일을 기업 Exchange 서버로 보냅니다.SMTP 시간 초과를 처리하는 방법
클라이언트 응용 프로그램 시간 초과 (서버가 아님)가 발생할 수 있습니다. 서버가 요청을 완료했는지 알 수있는 방법이 없으므로이 경우 재 시도를 처리하는 방법은 무엇입니까?
중복을 피하기 위해 사용할 수있는 ID는 없습니다. 긴 시간 초과 또는 무한 시간 제한 설정은 좋은 정책이 아닙니다.
재 시도를 위해 지수 백 오프 알고리즘을 사용하고 있습니다. 이 경우 다음 번에 더 오래 기다릴 것이므로 하나의 복제본 만 보내야합니다.
나는 총알 전문가 솔루션이 없다고 생각합니다. 어쨌든, 그것은 종류의 첫 번째 프로젝트이기 때문에, 나는 누군가가 내가 놓친 해결책을 가지고 있는지 확인해야합니다.
업데이트 : 교환 중입니다. SmtpClient를 사용하여 전자 메일을 보내고 있습니다. 문제는 서버가 250 Ok 메시지를 보낼 수 있지만 수신자가 메시지를받지 못하고 다시 시도하는 것입니다. 이것이 내가이 게시물에서 해결하려고하는 유일한 문제이다.
휴식 서비스에서 권장되는 방법은 동시성 오류를 사용하는 것입니다. 클라이언트가 뭔가를 게시하고 메시지가 이미 서버에 저장되었다는 의미 인 "409 - 충돌"상태가 발생하는 경우 그러나 거기에서 일어나는 일은 클라이언트가 생성하고 메시지의 일부인 메시지의 열쇠가되는 것입니다. SMTP가이를 막을 수있는 메커니즘이없는 것 같습니다.
합니다. 클라이언트 시간 초과가 발생하면 클라이언트가 서버 응답을 기다리는 것을 포기하고 요청을받지 못하기 때문에 요청의 결과를 알 수 없습니다. 예 : 통신이 끊어지면 서버가 끝까지 진행되지만 클라이언트는 응답을받지 못합니다. 다른 예를 들자면, 서버가 사용량이 많았 기 때문에 31 초 후에 요청을 처리했지만 클라이언트는 30 초 후에 응답을 보냈습니다. – ByteArtisan
매우 간단합니다. 요즘 모든 SMTP 서버는 [RFC 5321] (https : //tools.ietf. org/html/rfc5321 # section-4.5.4.) _keep는 해당 URL을 스크롤 할 수 있다고 언급했습니다. 애플리케이션은 RFC 5321을 준수해야합니다. 그렇지 않으면 여러 전자 메일을 보내 게됩니다. 즉 진행이 중간에 끊어지면 서버가 전자 메일을 계속 진행할 수 없으며 단순히 작동하지 않고 RFC 5321에 위배됩니다. 즉, 응용 프로그램에서 RFC에 언급 된 250 OK를 얻은 다음 전자 메일 원격 서버가 수락했습니다. 그렇지 않은 경우 다시 보내야합니다. – BastianW
우리가 같은 페이지에 있는지 잘 모르겠습니다. Microsoft Exchange 서버는 나를 위해 릴레이를 수행하도록 구성되어 있으므로 RFC 5321이이 서버에 의해 보장되어야합니다. 어떤 방식 으로든 RFC 5321을 준수해야합니까? 한 번에 하나의 메시지를 보내고 사전에 결과를 확인합니다. 오류가 발생하면 5 번 다시 시도하고 처음에는 문제가 발생했습니다. 시간 초과가 있다면 진행하는 법. – ByteArtisan