2008-09-11 10 views
0

웹 응용 프로그램 용 사용자를 만들 때 자동 생성 된 암호가있는 SMTP 전자 메일 (ASP.NET의 SmtpClient 사용)이 사용자에게 전송됩니다. 그러나 때로는 내가 알아 차린 것은 새로운 사용자가 암호를 사용하여 전자 메일을받지 못하는 것입니다.SMTP 메일 시간 초과 문제

괜찮 았으므로 메일이 통과하지는 않았지만 사용자가 생성되었다는 메시지가 표시됩니다.

가) 사용자의 암호를 재설정하고 다른 SMTP 메일이 자동으로 생성 된 암호를 사용하여 전송됩니다 희망 :

따라서, 체계적으로 줄여 나가게 관리자가이 옵션까지 있습니다. b) 사용자를 삭제하고 다시 만드십시오.

smtp가 전송되지 않으면 사용자 생성을 롤백 할 수 있지만이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

나는 각각 5 초의 제한 시간으로 이메일을 3 회 송신해야한다고 생각하고있다. 따라서 15 초가 최악의 시나리오 일 것입니다.

이 방법이 있습니까?

답변

1

플랫폼에 따라 메일을 로컬 MTA에 전달할 수있는 경우 재 시도 등을 처리해야합니다. 귀하의 프로그램은 메일을 대기열에 넣고 계속 진행할 수 있습니다. 시간 제한 및 그레이리스트 등을 다루는 것에 대해 걱정할 필요가 없습니다.

메시지를 전달할 수없는 경우 암호 재전송 기능을 통해 항상 재전송을 시도 할 수 있습니다. 그래도 실패하면 이메일 주소에 실수가 있었을 가능성이 높습니다. 계정을 삭제하면 사용자가 다시 등록하게됩니다.

물론 일부 시스템에서는 확인되지 않은 사용자가 수행 할 수있는 작업에 따라이 작업을 수행하지 못할 수도 있습니다. 실제로는 전자 메일의 유효성을 검사하기 전에 사람들이 수행 할 수있는 작업에 따라 달라집니다.

0

IMHO 재시도없이 사용자에게 이메일 확인을 요청해야합니다.

사용자가 전자 메일을 확인하지 않고 페이지를 떠나는 경우 사용자가 어쨌든 액세스 할 수 없으므로 계정을 롤백하는 것이 좋습니다.

대부분의 시간 초과는 잘못된 전자 메일 계정 때문에 발생합니다. 사용자가 실수를했거나 스팸이 아닌 이메일 주소를 알려주었습니다.

가능한 한 사용자의 이메일을 요청하지 마십시오. 프로그래밍의 가장 중요한 규칙은 다음과 같아야합니다. 사용자를 괴롭히지 마십시오.

1

웹 앱에서 사용자의 메일 서버로 직접 SMTP를 보내는 것처럼 들립니다. [사용자 웹 MTA (Mail User Agent)가 사용자의 MTA (Mail Transfer Agent)와 대화하고 있습니다.] 사용자의 MTA가 현재 연결 가능해야하거나 현재 작업 중이라고 말하는 것은 없습니다. 누군가가 대기열에 넣기, 재시도 등을 제공 할 수 있도록 자신의 MTA를 실행해야합니다.

정말로 거꾸로 굴러 가려는 경우 자신이하고있는 일 (한 번만 시도)을 할 수 있습니다. 메시지를 대기열에 넣고 최소 24 시간 동안 더 느린 일정으로 재 시도를 계속하고 미완성 상태를 사용자에게 알려줍니다.

앱이 작동하도록되어 방법에 대한 공식적인 답변 RFC1123 (Requirements for Internet Hosts - Application and Support)에서 찾을 수 있습니다

5.3.1.1 전략

보내기

보낸 사람 - SMTP의 일반적인 모델은 하나 이상의 프로세스이다 은 주기적으로 발신 메일을 전송하려고 시도합니다. 즉시 전송할 수 없습니다 메일 가 대기하고 주기적으로 보낸 사람에 의해 시도해야하는 동안 일반적인 시스템에서 메시지 를 구성 프로그램은, 보내는 메일의 새로운 조각에 대한 즉각적인주의를 요청하기위한 몇 가지 방법이있다. 메일 대기열 항목은 메시지 자체뿐만 아니라 봉투 정보도 포함합니다 ( ).

시도가 실패한 후 보낸 사람이 특정 대상을 다시 시도해야합니다. 일반적으로 재시도 간격은 30 이상이어야합니다. 분; 그러나 더 세련된 과 다양한 전략을 사용하면 발신자 SMTP가 배달 이유를 결정할 때 유용합니다.

메시지가 으로 전송되거나 보낸 사람이 포기할 때까지 계속합니다. 포기 시간은 일반적으로 최소 4-5 일 동안 일 필요가 있습니다. 에 대한 매개 변수는 구성 가능해야합니다.

0

ASP.NET 및 System.Net.Mail 클래스를 사용하는 경우 웹 서버 컴퓨터의 IIS 인스턴스를 통해 메일을 보내고있는 것입니다 (사용자가 지정하지 않았으므로 확실하지 않습니다) . 메일 전송 에이전트 (IIS SMTP)로 무슨 일이 일어나는지 알 수있는 좋은 방법은 없습니다. 자체 재시도 논리가 있으며, 기본적으로 메시지가 전달되는 데 오랜 시간이 걸릴 수 있습니다.

메일이 배달되지 않았 음을 어떻게 감지합니까? "시간 초과"란 무엇입니까?

메일 보내기를 처리하는 백그라운드 프로세스가 있어야합니다. MTA에 대한 배달이 성공하면 모두 정상이라고 가정해야합니다. 스팸에 대한 차단 목록에 포함되어 있지 않으면 대부분의 MTA는 통과 할 때까지 계속 재 시도합니다. 실제로 MTA에서 메시지를 삭제하는 중에 오류가 발생하면 확실히 다시 시도하거나 오류의 원인을 파악하고 버그를 수정하십시오. 솔직히이 부분은 절대로 실패해서는 안됩니다.

NDR 메시지의 반송 주소를 모니터링하여 전자 메일이 배달되지 않았 음을 알 때 어떤 종류의 작업을 수행 할 수 있습니다. 그러나 사용자가 아직 시스템에 로그인 할 수 없으면 어떤 일이 발생했는지 알 수있는 좋은 방법이 없습니다. 어쩌면 이메일과 연결 한 값으로 쿠키를 설정할 수 있으며, 메일을 전달할 수없는 경우 로그인/등록 페이지에 무엇인가 올려 놓을 수 있습니다.