2011-12-03 13 views
13

javax.mail के साथ मेल भेजते समय मैं SMTP संदेश-आईडी कैसे सेट कर सकता हूं। मेरे मेल सर्वर कुछ इस तरह की रिपोर्ट है:मैं javax.mail के साथ एसएमटीपी संदेश-आईडी कैसे सेट या बदलूं?

1 <= [email protected] H=mail (host) [192.168.1.4] P=esmtp S=142014 
    [email protected] 
2 => [email protected] R=dnslookup T=remote_smtp H=mx00.t-online.de [194.25.134.8] 
3 Completed 

मैं इसे भेजने से पहले [email protected] सेट करना चाहते हैं। क्या यह संभव है? ईमेल इसे इस तरह बनाया:

Properties props = System.getProperties(); 
props.put("mail.smtp.host", "192.168.1.4"); 
Session session = Session.getDefaultInstance(props, null); 
session.setDebug(false); 
Message msg = createMsg(); 
Transport.send(msg); 

उत्तर

21

मेरा मानना ​​है कि JavaMail FAQ के इस भाग आपके प्रश्न के उत्तर:

प्रश्न: मैं अपने नए संदेश की संदेश- ID हैडर के लिए एक विशेष मान सेट , लेकिन जब मैं यह संदेश भेजता हूं कि हेडर फिर से लिखा जाता है।

एक: संदेश-आईडी फ़ील्ड के लिए एक नया मूल्य जब SaveChanges विधि कहा जाता है सेट कर दिया जाता है (आमतौर पर परोक्ष जब संदेश भेजा है), आप अपने आप को सेट किसी भी मूल्य को अधिलेखित। यदि आपको अपना स्वयं का संदेश-आईडी सेट करने की आवश्यकता है और इसे बनाए रखा है, तो आपको अपना खुद का MimeMessage सबक्लास बनाना होगा, अद्यतन मैसेज आईडी विधि को ओवरराइड करें और इस सबक्लास के उदाहरण का उपयोग करें।

class MyMessage extends MimeMessage { 
    ... 

    protected void updateMessageID() throws MessagingException { 
    setHeader("Message-ID", "my-message-id"); 
    } 
    ... 
} 
10
Oracle's FAQ के अनुसार

, आप संदेश भेजने या SaveChanges, संदेश- ID हैडर updateMessageID() विधि है, जो आप पहले से ही सेट हो सकता है किसी भी मान ओवरराइड द्वारा निर्धारित फोन जब।

class MyMimeMessage extends MimeMessage { 
    ... 
    protected void updateMessageID() throws MessagingException { 
     setHeader("Message-ID", "my-message-id"); 
    } 
    ... 
} 

मैं दबाने या संदेश को खत्म करने के लिए इस तकनीक का उपयोग करने में सक्षम था:

अपने स्वयं के मान को सेट करने के लिए आपको MimeMessage की एक उप-वर्ग बना सकते हैं और अपने खुद के updateMessageID() फ़ंक्शन को लागू करने की आवश्यकता होगी इस तरह -Id हैडर:

@Override 
protected void updateMessageID() throws MessagingException { 
    removeHeader("Message-Id"); 
} 

यह Mailgun है, जो संदेश-ईद खुद को सेट आप एक सेट नहीं करते के लिए उपयोगी था।

1

आप संदेश भेजने से पहले परिवर्तन भेज सकते हैं और कस्टम संदेश सेट कर सकते हैं। चरण:

  1. माइम संदेश संदेश बनाएं और उसका डेटा सेट करें।
  2. message.saveChanges();
  3. message.setHeader ("संदेश-आईडी", yourCustomMessageId);
  4. संदेश भेजें।
0
MimeMessage msg = new MimeMessage(s) { 
    @Override 
    protected void updateMessageID() { } // Prevent MimeMessage from overwriting our Message-ID 
}; 
msg.setHeader("Message-ID", "MyOwnMessageID"); 
0

इस संदेश में अनुकूलित आईडी लागू करने के लिए पूरा कोड है

public class SendMessage{ 

    private String idMessage; 

    private void sendEmail() { 
     //... 
     // Create de session 
     //... 

     Message message = new MyMessage(session); 

     //... 
     // Prepare the body of the message, attachments, etc. 
     //... 

     // assign custom message id 
     this.idMessage = “My own ID”; 

     //send 
     Transport.send(message); 
    } 

    class MyMessage extends MimeMessage { 

     public MyMessage(Session session) { 
      super(session); 
     } 

     protected void updateMessageID() throws MessagingException { 
      setHeader("Message-ID", this.idMessage); 
     } 
    } 
}