最近要做一個郵件轉發功能,看了好多blog,都是接受郵件,再解析郵件內容,再組裝成新的郵件發出!
我按照這個不夠,不錯!郵件發出去了。但是好麻煩啊,接受郵件是個Message,發送郵件也是個Message,是不是可以可以修修改改直接用啊!
但是我有不想修改原郵件,怎么辦。copy啊!
發送郵件需要那些基本內容啊?
如下:
forward.setSubject(message.getSubject()); forward.setFrom(new InternetAddress("XXX")); forward.setRecipient(Message.RecipientType.TO, new InternetAddress("OOO")); forward.setSentDate(new Date()); forward.setContent(message.getContent(), message.getContentType());
對就是這些內容,而這些內容都可以直接從原郵件中獲得,特別是Content這個字段,不需要解析這個Object具體是啥,直接拿來用就行了!
轉發是不是很簡單。
實用demo:
public void forwardMail(Session session, Message message) throws MessagingException, IOException { Message forward = new MimeMessage(session); forward.setSubject(message.getSubject()); forward.setFrom(new InternetAddress("xxx@126.com")); forward.setRecipient(Message.RecipientType.TO, new InternetAddress("ooo@126.com")); forward.setSentDate(new Date()); forward.setContent(message.getContent(), message.getContentType()); Transport smtp = session.getTransport("smtp"); smtp.connect(); smtp.sendMessage(forward, forward.getAllRecipients()); smtp.close(); }
最后附上,接受郵件,發送郵件的屬性設置:(有些郵箱的用戶名不帶后綴,只用@前面的部分就行了)
Properties properties = new Properties(); // 發送郵件使用的協議 properties.setProperty("mail.transport.protocol", sendProtocol); properties.setProperty("mail.smtp.host", mailHost); properties.setProperty("mail.smtp.timeout", "20000"); properties.setProperty("mail.smtp.connectiontimeout", "20000"); // 接收郵件使用的協議 properties.setProperty("mail.store.protocol", storeProtocol); properties.setProperty("mail.imap.host", mailHost); properties.setProperty("mail.imap.starttls.enable", "true"); Session session = Session.getDefaultInstance(properties); // session.setDebug(true); Store store = session.getStore(storeProtocol); // 接受郵件 store.connect(mailHost, user, password); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_WRITE); //使用完關閉資源 folder.close(false); store.close(); // 發送郵件 Transport smtp = session.getTransport("smtp"); smtp.connect(); smtp.sendMessage(forward, forward.getAllRecipients()); smtp.close();