避免在 java 邮件 API 中封装邮件
Avoiding encapsulated mail in java mail API
我编写了代码来检查邮件获取收件人计算他们的长度,并根据该计算将邮件转发到相同的 id,一切正常,但我的邮件作为附件转发。我不想要那个。我要转发简单的邮件。
不足之处请指教
public class CheckingMail {
public static void main(String[] args) {
String host = "mycompanyname.com";
String mailStoreType = "pop3";
String username = "myemailid.com";
String password = "mypassword";
check(host, mailStoreType, username, password);
}
public static void check(String host, String mailStoreType,String username, String password) {
try {
System.out.println("\n\n1 creating the properties field");
//create properties field
Properties properties = new Properties();
properties.put("mail.pop3.host", host); //The POP3 server to connect to.
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
// Get a Session
Session emailSession = Session.getInstance(properties);
System.out.println("\n\n2 Get a Session="+emailSession);
System.out.println("\n\n3 create the POP3 store object and connect with the pop server");
//create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
// Store store = emailSession.getStore(mailStoreType);
store.connect(host,username,password);
System.out.println("\n\n4create the folder object and open it");
//create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
System.out.println("\n\n5 retrieve the messages from the folder in an array and print it");
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
System.out.println("\n before for loop");
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
// MimeMessage message = new MimeMessage(emailSession);
System.out.println("---------------------------------");
System.out.println("Email Number =" + (i + 1));
//System.out.println("To Recipients =" + message.getRecipients(Message.RecipientType.TO));
System.out.println("Subject = " + message.getSubject());
System.out.println("From =" + message.getFrom()[0]);
// System.out.println("Text =" + message.getContent().toString());
/*===================== To and CC starts here ===============================*/
Address[] address;
StringBuffer msg_buffer_to = new StringBuffer(50);
// TO
if ((address = message.getRecipients(Message.RecipientType.TO)) != null) {
for (int j = 0; j < address.length; j++) {
msg_buffer_to.append(address[j]);
System.out.println("\t\t\tTO " + address[j]);
}
}
StringBuffer msg_buffer_cc = new StringBuffer(50);
// CC
if ((address = message.getRecipients(Message.RecipientType.CC)) != null) {
for (int j = 0; j < address.length; j++) {
msg_buffer_cc.append(address[j]);
System.out.println("\t\t\tCC " + address[j]);
}
}
//counting the length here for both To and CC...
System.out.println("\n\n\t total length is== "+(msg_buffer_to.length()+msg_buffer_cc.length())+"\n\n");
/*************************************Merging of forward class***********************************************************/
if((msg_buffer_to.length()+msg_buffer_cc.length())>100)
{
System.out.println("\n\t Address length crossed the limits\t\n");
//forward mailing starts here
// Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", "mycompanyname.com");
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "mycompanyname.com");
properties.put("mail.smtp.port", "25");
Session session = Session.getInstance(properties,new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("mymailid.com","mypassword");
}
});
try{
// session.setDebug(true);
// Get a Store object and connect to the current host
// Create a Folder object and open the folder
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
if (messages.length != 0) {
// Get all the mail ids from the message
String from = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (from != null) {
System.out.println("From:" + from);
}
String to = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
}
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
}
Message forward = new MimeMessage(session);
// Fill in header
forward.setRecipients(Message.RecipientType.TO,InternetAddress.parse("mymailid.com"));
forward.setSubject("Fwd: " + message.getSubject());
forward.addFrom(InternetAddress.parse(from));
forward.setFrom(new InternetAddress("mymailid.com"));
// Create the message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
// Create a multipart message
Multipart multipart = new MimeMultipart();
// set content
messageBodyPart.setContent(message, "message/rfc822");
// Add part to multi part
multipart.addBodyPart(messageBodyPart);
// Associate multi-part with message
forward.setContent(multipart);
forward.saveChanges();
Transport.send(forward);
// Send the message by authenticating the SMTP server
// Create a Transport instance and call the sendMessage
System.out.println("message forwarded successfully....");
// } // end if
// }
}// end if
catch(Exception e) {
e.printStackTrace();
}
}
}
//close the store and folder objects
System.out.println("\n\n6 close the store and folder objects");
emailFolder.close(false);
store.close();
} catch (MessagingException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
}![enter image description here](https://i.stack.imgur.com/EPe3t.jpg)
抱歉,我来晚了发布完整的解决方案,用于根据字符长度转发邮件作为文本邮件而不是附加邮件。将此视为已接受的答案。希望能达到目的。
public class CheckingMail {
public static void main(String[] args) {
String host = "mycompanyname.com";
String mailStoreType = "pop3";
String username = "myemailid.com";
String password = "mypassword";
check(host, mailStoreType, username, password);
}
public static void check(String host, String mailStoreType,String username, String password) {
try {
System.out.println("\n\n1 creating the properties field");
Properties properties = new Properties();
properties.put("mail.pop3.host", host); //The POP3 server to connect to.
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getInstance(properties);
System.out.println("\n\n2 Get a Session="+emailSession);
System.out.println("\n\n3 create the POP3 store object and connect with the pop server");
Store store = emailSession.getStore("pop3s");
store.connect(host,username,password);
System.out.println("\n\n4create the folder object and open it");
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
System.out.println("\n\n5 retrieve the messages from the folder in an array and print it");
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
System.out.println("\n before for loop");
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
System.out.println("Email Number =" + (i + 1));
System.out.println("Subject = " + message.getSubject());
System.out.println("From =" + message.getFrom()[0]);
Address[] address;
StringBuffer msg_buffer_to = new StringBuffer(50);
if ((address = message.getRecipients(Message.RecipientType.TO)) != null) {
for (int j = 0; j < address.length; j++) {
msg_buffer_to.append(address[j]);
System.out.println("\t\t\tTO " + address[j]);
}
}
StringBuffer msg_buffer_cc = new StringBuffer(50);
if ((address = message.getRecipients(Message.RecipientType.CC)) != null) {
for (int j = 0; j < address.length; j++) {
msg_buffer_cc.append(address[j]);
System.out.println("\t\t\tCC " + address[j]);
}
}
System.out.println("\n\n\t total length is== "+(msg_buffer_to.length()+msg_buffer_cc.length())+"\n\n");
if((msg_buffer_to.length()+msg_buffer_cc.length())>100)
{
System.out.println("\n\t Address length crossed the limits\t\n");
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", "mycompanyname.com");
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "mycompanyname.com");
properties.put("mail.smtp.port", "25");
Session session = Session.getInstance(properties,new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("mymailid.com","mypassword");
}
});
try{
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
if (messages.length != 0) {
String from = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (from != null) {
System.out.println("From:" + from);
}
String to = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
}
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
}
Message forward = new MimeMessage(session);
forward.setRecipients(Message.RecipientType.TO,InternetAddress.parse("mymailid.com"));
forward.setSubject("Fwd: " + message.getSubject());
forward.addFrom(InternetAddress.parse(from));
forward.setFrom(new InternetAddress("mymailid.com"));
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
messageBodyPart.setContent(message.getContent(), "message/rfc822");
multipart.addBodyPart(messageBodyPart);
forward.setContent(multipart);
forward.saveChanges();
Transport.send(forward);
System.out.println("message forwarded successfully....");
}
catch(Exception e) {
e.printStackTrace();
}
}
}
System.out.println("\n\n6 close the store and folder objects");
emailFolder.close(false);
store.close();
} catch (MessagingException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
}
我编写了代码来检查邮件获取收件人计算他们的长度,并根据该计算将邮件转发到相同的 id,一切正常,但我的邮件作为附件转发。我不想要那个。我要转发简单的邮件。
不足之处请指教
public class CheckingMail {
public static void main(String[] args) {
String host = "mycompanyname.com";
String mailStoreType = "pop3";
String username = "myemailid.com";
String password = "mypassword";
check(host, mailStoreType, username, password);
}
public static void check(String host, String mailStoreType,String username, String password) {
try {
System.out.println("\n\n1 creating the properties field");
//create properties field
Properties properties = new Properties();
properties.put("mail.pop3.host", host); //The POP3 server to connect to.
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
// Get a Session
Session emailSession = Session.getInstance(properties);
System.out.println("\n\n2 Get a Session="+emailSession);
System.out.println("\n\n3 create the POP3 store object and connect with the pop server");
//create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
// Store store = emailSession.getStore(mailStoreType);
store.connect(host,username,password);
System.out.println("\n\n4create the folder object and open it");
//create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
System.out.println("\n\n5 retrieve the messages from the folder in an array and print it");
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
System.out.println("\n before for loop");
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
// MimeMessage message = new MimeMessage(emailSession);
System.out.println("---------------------------------");
System.out.println("Email Number =" + (i + 1));
//System.out.println("To Recipients =" + message.getRecipients(Message.RecipientType.TO));
System.out.println("Subject = " + message.getSubject());
System.out.println("From =" + message.getFrom()[0]);
// System.out.println("Text =" + message.getContent().toString());
/*===================== To and CC starts here ===============================*/
Address[] address;
StringBuffer msg_buffer_to = new StringBuffer(50);
// TO
if ((address = message.getRecipients(Message.RecipientType.TO)) != null) {
for (int j = 0; j < address.length; j++) {
msg_buffer_to.append(address[j]);
System.out.println("\t\t\tTO " + address[j]);
}
}
StringBuffer msg_buffer_cc = new StringBuffer(50);
// CC
if ((address = message.getRecipients(Message.RecipientType.CC)) != null) {
for (int j = 0; j < address.length; j++) {
msg_buffer_cc.append(address[j]);
System.out.println("\t\t\tCC " + address[j]);
}
}
//counting the length here for both To and CC...
System.out.println("\n\n\t total length is== "+(msg_buffer_to.length()+msg_buffer_cc.length())+"\n\n");
/*************************************Merging of forward class***********************************************************/
if((msg_buffer_to.length()+msg_buffer_cc.length())>100)
{
System.out.println("\n\t Address length crossed the limits\t\n");
//forward mailing starts here
// Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", "mycompanyname.com");
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "mycompanyname.com");
properties.put("mail.smtp.port", "25");
Session session = Session.getInstance(properties,new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("mymailid.com","mypassword");
}
});
try{
// session.setDebug(true);
// Get a Store object and connect to the current host
// Create a Folder object and open the folder
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
if (messages.length != 0) {
// Get all the mail ids from the message
String from = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (from != null) {
System.out.println("From:" + from);
}
String to = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
}
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
}
Message forward = new MimeMessage(session);
// Fill in header
forward.setRecipients(Message.RecipientType.TO,InternetAddress.parse("mymailid.com"));
forward.setSubject("Fwd: " + message.getSubject());
forward.addFrom(InternetAddress.parse(from));
forward.setFrom(new InternetAddress("mymailid.com"));
// Create the message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
// Create a multipart message
Multipart multipart = new MimeMultipart();
// set content
messageBodyPart.setContent(message, "message/rfc822");
// Add part to multi part
multipart.addBodyPart(messageBodyPart);
// Associate multi-part with message
forward.setContent(multipart);
forward.saveChanges();
Transport.send(forward);
// Send the message by authenticating the SMTP server
// Create a Transport instance and call the sendMessage
System.out.println("message forwarded successfully....");
// } // end if
// }
}// end if
catch(Exception e) {
e.printStackTrace();
}
}
}
//close the store and folder objects
System.out.println("\n\n6 close the store and folder objects");
emailFolder.close(false);
store.close();
} catch (MessagingException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
}![enter image description here](https://i.stack.imgur.com/EPe3t.jpg)
抱歉,我来晚了发布完整的解决方案,用于根据字符长度转发邮件作为文本邮件而不是附加邮件。将此视为已接受的答案。希望能达到目的。
public class CheckingMail {
public static void main(String[] args) {
String host = "mycompanyname.com";
String mailStoreType = "pop3";
String username = "myemailid.com";
String password = "mypassword";
check(host, mailStoreType, username, password);
}
public static void check(String host, String mailStoreType,String username, String password) {
try {
System.out.println("\n\n1 creating the properties field");
Properties properties = new Properties();
properties.put("mail.pop3.host", host); //The POP3 server to connect to.
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getInstance(properties);
System.out.println("\n\n2 Get a Session="+emailSession);
System.out.println("\n\n3 create the POP3 store object and connect with the pop server");
Store store = emailSession.getStore("pop3s");
store.connect(host,username,password);
System.out.println("\n\n4create the folder object and open it");
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
System.out.println("\n\n5 retrieve the messages from the folder in an array and print it");
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
System.out.println("\n before for loop");
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
System.out.println("Email Number =" + (i + 1));
System.out.println("Subject = " + message.getSubject());
System.out.println("From =" + message.getFrom()[0]);
Address[] address;
StringBuffer msg_buffer_to = new StringBuffer(50);
if ((address = message.getRecipients(Message.RecipientType.TO)) != null) {
for (int j = 0; j < address.length; j++) {
msg_buffer_to.append(address[j]);
System.out.println("\t\t\tTO " + address[j]);
}
}
StringBuffer msg_buffer_cc = new StringBuffer(50);
if ((address = message.getRecipients(Message.RecipientType.CC)) != null) {
for (int j = 0; j < address.length; j++) {
msg_buffer_cc.append(address[j]);
System.out.println("\t\t\tCC " + address[j]);
}
}
System.out.println("\n\n\t total length is== "+(msg_buffer_to.length()+msg_buffer_cc.length())+"\n\n");
if((msg_buffer_to.length()+msg_buffer_cc.length())>100)
{
System.out.println("\n\t Address length crossed the limits\t\n");
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", "mycompanyname.com");
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "mycompanyname.com");
properties.put("mail.smtp.port", "25");
Session session = Session.getInstance(properties,new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("mymailid.com","mypassword");
}
});
try{
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
if (messages.length != 0) {
String from = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (from != null) {
System.out.println("From:" + from);
}
String to = InternetAddress.toString(message.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
}
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
}
Message forward = new MimeMessage(session);
forward.setRecipients(Message.RecipientType.TO,InternetAddress.parse("mymailid.com"));
forward.setSubject("Fwd: " + message.getSubject());
forward.addFrom(InternetAddress.parse(from));
forward.setFrom(new InternetAddress("mymailid.com"));
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
messageBodyPart.setContent(message.getContent(), "message/rfc822");
multipart.addBodyPart(messageBodyPart);
forward.setContent(multipart);
forward.saveChanges();
Transport.send(forward);
System.out.println("message forwarded successfully....");
}
catch(Exception e) {
e.printStackTrace();
}
}
}
System.out.println("\n\n6 close the store and folder objects");
emailFolder.close(false);
store.close();
} catch (MessagingException e){
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
}