2014-01-31 2 views
5

JavaMail을 사용하여 누가 특정 이메일을 보내는 지 확인하고 싶습니다.메시지에 여러 명의 발신자가있을 수 있습니까?

나는 어떤 상황 부활의 메시지가 온 여러 ID를 가질 수에서,

Message[] 

을 반환

Message.getFrom() 

를 사용할 수 있습니까?

API에 관해서는 발신 이메일에 더 적합합니다.

그래서, 정말로 내가 할 수 있습니다

Address from = message.getFrom()[0]; 

는 항상 메시지에서 보내는 정확히 1 개 주소를 나에게 다시 제공?

지금과 같이 구현 :

Address[] fromAddress = message.getFrom(); 

if (fromAddress == null || fromAddress.length > 1) { 
    // Don't Process the Email and Notify me 
} 
+0

설명서에 * empty * 배열을 반환 할 수있는 것으로 나타났습니다. –

+0

메시지를 보내고 아직 설정하지 않은 경우 의미가 있습니다. 그러나 들어오는 모든 메시지에는 정확히 하나의 ID가 있어야합니다. 저는 왜 이메일/메시지에 두 개 이상의 필드가 있어야하는지 알지 못합니다 ... – Kuchi

+1

0과 1은 실제로 발생합니다. 하나 이상의 스팸은 요즘 스팸의 확실한 신호입니다 (이전 밀레니엄과는 다릅니다). 그렇다면 코드가 충돌하지 않고 모든 것이 정상적으로 작동하는지 확인하십시오. – arnt

답변

4

예, Message.getFrom() 정말 여러 개의 주소를 반환 할 것으로 보인다합니다 (RFC는 하나의 sender 헤더가 필요하기 때문했거나 from의가 있습니다 작동).

Apache Geronimo의 JavaMail API 구현 소스를 살펴본 결과, From: 헤더가 여러 개 있거나 하나의 헤더 내에 여러 개의 주소가있는 경우 여러 개의 주소가 반환됩니다. 이런 일이 수 있는지에 관해서는

: 하나의 "보낸 사람"이있는 경우

알렉스 K.의 대답에 의해 설명 바와 같이, 표준 주소 "에서"여러 수 있습니다. 다른 사람이 여러 "보낸 사람"주소로 메일을 실제로 보낼지는 모르지만 표준을 준수합니다. 실무에서 실제로 발생

또 다른 상황 :

일부 스패머는 분명히 여러 From: 헤더로 메일을 보내주십시오. 이것은 표준을 따르지는 않지만 일부 메일 서버는 여전히 메일을 허용합니다. 이는 분명히 주소가 From: 인 필터링 된 과거 메일 필터를 가져 오기 위해 수행됩니다. 스팸 발송자는 "보낸 사람"주소가있는 머리글 하나를 찾으면 단순한 필터로 메시지를 전달할 수 있기를 바라는 여러 주소를 포함합니다.

요약 : 예, Message.getFrom()은 복수 주소를 반환하거나 전혀 반환하지 않아야합니다. 그러나이 사건을 처리하기 위해 많은 에너지를 소비 할 필요는 없습니다. 아마도 응용 프로그램에 따라 오류로 로깅하는 것만으로도 벗어날 수 있습니다.

2

SMTP의 MAIL FROM 명령은 1 주소 그러나 From: 헤더 (IMF 형식) 수는 하나의 주소에 제한되지 않는다

RFC 5322, 3.6.2. 발신자 필드 : 발신자 필드는 보낸 사람 필드 ...으로 구성됩니다. 보낸 사람 필드는 보낸 사람 필드 이름과 하나 이상의 사서함 사양이 쉼표로 구분 된 목록으로 구성됩니다.

관련 문제