2010-06-24 1 views
1

클라이언트 서버 응용 프로그램에 전자 메일 알림을 추가해야합니다.클라이언트가 잠재적으로 인터넷에 연결되어 있지 않은 2 계층 응용 프로그램에서 전자 메일 알림을 보내는 것에 대한 제안

알림은 사용자가 클라이언트 UI에서 특정 작업을 수행 할 때 발생합니다. 나는 중간 계층 또는 서버에서 실행되는 서비스가 있다면

나는 그것을 수행하는 방법을 상상할 수 :

1) 단순히 사용자로 "보류 통지"

2)와 DB 테이블을 생성 알림을 생성하는 작업이 나는 테이블에 레코드를 추가 않습니다

3) 서버 측 나는 계속 그 메일을 보내려고 한 번 전송 테이블에서 제거하는

지금 내가 지금이 작업을 수행 할 수 없습니다 성공적인입니다 것입니다, 나는 계획을 가지고있다. 나중에 서비스를해라. 그러나 당장 나는 빨리 더러운 길로 가야한다.

그래서 어떻게 든 내가 무슨 생각 같은 것을 구현하는 것입니다하기 : 실패시

1)은 통지 가치 이벤트가 클라이언트에서 발생, 같은 클라이언트 (내 EXE)는 통지를 보내려고 시도로 그것을 "pending notifications"테이블에 알림을 로깅합니다 (인터넷 연결 또는 기타 문제로 인해 실패 할 수 있음)

2) 보류중인 알림을 확인하기 위해 모든 클라이언트 컴퓨터에서 작동하는 타이머를 추가합니다. 클라이언트가 전자 메일을 보내려고하면 (트랜잭션을 사용하여 필드를 "TryngToSendFromClientX"로 표시하고 실패 할 경우 해당 필드를 NULL로 재설정합니다)

이 접근 방식은 (서비스가 실패한 경우 아무도 시스템에 로그인하지 않으면 아무런 통지도 보내지 않을 것입니다. 서비스가 "다운"되는 경우에도 마찬가지입니다). 그러나이 접근 방식에 대해 의견을 제시하고 더 나은 접근 방식을 제안 할 수 있습니까?

추가 참고 (더 나은 시나리오를 이해하기) :

A) 참고 : 모든 알림이 같은 전자 메일 계정에서 전송됩니다.

b) 전자 메일을 보낸 사람을 추적 할 필요가 없습니다.

c) 서비스를 만드는 문제는 기본적으로 배포가 복잡해 지므로 서비스 상태를 모니터링하는 도구를 만들어야한다는 것입니다. 내가 미래에 할 것이지만 지금은 안될 것이지만 앞으로는 더 많은 기능을 서비스에 추가 할 계획이 있으므로이 경우에는 서비스를 만드는 것이 더 합리적입니다.

d) Indy 구성 요소와 SMTP 서버를 사용하여 전자 메일을 보냅니다.

답변

2

지금 서비스를 작성하지 않으려는 경우, 사용자가 설명하는 시나리오에 계속 빠져 있다고 생각합니다.아직 보류중인 메시지가있는 동안 사용자가 더 이상 클라이언트를 시작하지 못하게하는 문제를 피할 수는 있지만 몇 가지 사항이 있습니다.

대기중인 메시지 만 확인하고 메시지를 보내려는 명령 줄 유틸리티 (또는 bepe4711 제안의 명령 줄 매개 변수)를 추가 할 수 있습니다.

이 명령 줄 유틸리티를 StartUp 폴더 나 Run 키에 레지스트리에 추가하십시오. 이렇게하면 사용자가 앱을 실행하지 않아도 컴퓨터가 다시 시작될 때 메시지가 전송됩니다.

이 유틸리티를 매일 적어도 한 번 실행하도록 예약 된 작업을 추가하십시오. 예약 된 작업은 코드 또는 설치 프로그램에서 추가 할 수 있습니다.

두 가지를 모두 수행하는 경우 컴퓨터를 다시 시작하지 않는 사용자의 보류 메시지에 대해서만 신경 써야합니다.

+0

bepe4711 답변을 완료 해 주셔서 감사합니다. – LaBracca

1

매개 변수를 클라이언트에 추가하여 보류중인 알림을보고 전송할 수도 있습니다. 이 후에는 스스로 끝낼 수 있습니다. 그것은 단지 일종의 서비스처럼 행동 할 것입니다.

그런 다음 서버에 클라이언트를 설치하고 x 분마다 시작하십시오.

+0

mmmm .... "유휴"실행중인 클라이언트를 서버에 두는 것은 나쁜 생각이 아닙니다. 그것은 빠르고 더러운 영역이지만 효과적입니다. – LaBracca

+0

나중에 서비스를 작성하려는 경우 솔루션을 찾기 위해 많은 노력을 기울이지 않을 것입니다. "진짜"서비스에 대한 더 많은 시간을 갖기 위해 빠르고 더러운 행동을하십시오. – bepe4711

+0

예, 동의합니다. 일시적인 해결책을 위해 많은 돈을 투자하는 것은 시간과 돈을 낭비하는 것입니다. 신속하고 더러운 것이 허용되는 방식으로 일한다면 (대안은 "전혀 일이 없다") 이미 개선 된 것입니다. 그렇다면 미래의 "진정한"구현이 최종 선택이 될 것입니다. – LaBracca

0

두 시스템이 모두 Windows에서 실행중인 경우 MS Message Queue를 확인하십시오. 항상 온라인 상태가 아닌 시스템에 알림을 보내도록 설계되었습니다. 내가 닷넷에서 해냈다. 이미 구현 된 클래스를 쉽게 사용할 수있다. 델파이에 대한 확신이 없습니다.

1

나는 당신이 묘사하는 접근법과 매우 유사한 것을합니다. 전자 메일을 보내는 대신 웹 서비스를 호출해야합니다. 내 응용 프로그램은 여러 대의 랩톱에 설치되며 일반적으로 모든 네트워크에 연결되지 않습니다.

내 애플리케이션에서 예외가 발생하면 사용자 의견과 스크린 샷을 비롯한 다양한 정보를 수집합니다. 그런 다음 이것을 웹 서비스에 보내려고합니다. 우연히 웹 서비스를 사용할 수없는 경우. (인터넷 또는 웹 서비스에 연결되어 있지 않음) 사용자 프로필 (App_Data) 디렉토리의 디스크에있는 XML 파일에 결과를 씁니다.

한 가지 중요한 차이점은 서버가 작동하는지 확인하기 위해 폴링하지 않는다는 것입니다. 나는 응용 프로그램을 시작할 때 다시 보내려고합니다.

+0

예, 버그 로그/보고서를 보내는 것과 비슷한 것을 할 것입니다. 이 경우 앱을 다시 실행하지 않기 때문에 메시지가 전송되지 않는다고해서 문제가되지 않습니다. 그러나 OP는 사용자가 앱을 다시 시작하는 것에 대한 제한을 피하기 위해 제안을 요청했습니다. –

+0

내가 가진 유일한 문제는 알림 사용자가 다른 사용자에게 관심이 있다는 것입니다. 사용자가 애플리케이션을 다시 실행하기를 기다릴 수 없어 다음 주에 발생할 수 있습니다. 너무 늦었습니다. 내 모든 임시 및 사용자 설정 파일에 대한 App_Data 폴더를 사용하지만,이 경우에는 실용적이지 않습니다. – LaBracca

0

Windows의 최신 버전은 Windows 작업 스케줄러를 훨씬 더 많이 사용하며, 이벤트가 발생할 때 (예 : 네트워크 카드가 연결될 때) 작업을 시작할 수 있습니다. 아무도 로그인하지 않아도 보류중인 알림을 보내려고하는 별도의 유틸리티를 작성할 수 있습니다.

+0

어쨌든 별도의 유틸리티 또는 서버가 문제가됩니다. 지금이 옵션이 없습니다. – LaBracca

관련 문제