form中method 用 postnamex, 用户名title, 显示的标题from, 从那儿送过来,缺省[email protected], 是完成以后显示的页面, 缺省取为空,即在原网页不动,有一个提示框显示,否则转至要求的网页cc, 密送的邮箱地址,缺省取[email protected]_name, 要替换sendto或sendto[]的名称, sendto缺省用'sendto',sendto[]缺省用'发送至'namex_name, 要替换namex的名称, 缺省用namexsendto, 要发送至单独一个email的项 或sendto[], 要发送至多个email的项, 对每一个checkbox,radio按钮,其name写sendto[]=...... email_1,email_2,email_3,email_4,......, 根据sendto[]值发向不同地的email地址值. 此处的1,2,3,4等要换成与sendto[]所选值完全相等
import javax.mail.internet.*;
import java.io.*;
import java.util.*;/**
* @author Croatia
*/
public class JavaMailTest { static int attachnum = 1; public static void main(String args[]) {
try {
String host = "xxx.xxx.xxx.xxx";
String user = "xxxxxx";
String password = "xxxxxx";
Session session =
Session.getDefaultInstance(System.getProperties(), null);
Store store = session.getStore("pop3");
store.connect(host, -1, user, password); Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE); int totalMessages = folder.getMessageCount();
if (totalMessages == 0) {
System.out.println("没有邮件");
folder.close(false);
store.close();
return;
} Message[] messages = folder.getMessages();
for (int i = 0; i < messages.length; i++) {
sendMail(messages[i]);
// messages[i].setFlag(Flags.Flag.DELETED, true);
}// folder.close(true);
folder.close(false);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
} public static void sendMail(Message m) throws Exception {
try {
Properties props = System.getProperties();
props.put("mail.smtp.host","XX.XX.XX.XX");
Session session=Session.getDefaultInstance(props,null);
Transport oTrans;
oTrans = session.getTransport("smtp");
oTrans.connect();
InternetAddress toAddress = new InternetAddress("[email protected]","姓名","gb2312");
Address[] oAdd = {toAddress};
oTrans.sendMessage(m,oAdd);
oTrans.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我就是用了sendMessage的方法,换掉了Send的方法.
因为,send() 方法执行的顺序:
1。首先调用消息上的 saveChanges() 方法。就是这步出错。你只是转发,没有必要作这一部。
2。然后创建合适的新 Transport 对象,调用 Transport 的 connect() 方法,
3。调用 Transport 的 sendMessage() 方法来实际发送消息,
4。接着调用 Transport 的 close() 方法,
5。最后丢弃 Transport 对象的新实例。这样做的的话,等于把别人原来的信,一模一样的发给了第三个人,第三个人看到的收信人地址,其实是MAIL原来的真正的收信者。
try { Properties props = System.getProperties();
props.put("mail.smtp.host", "XX.XX.XX.XX");
Session session = Session.getDefaultInstance(props, null); // 生成MimeMessage
MimeMessage forward = new MimeMessage(session); // Mail信息
forward.setSubject("Fwd: " + m.getSubject());
forward.setFrom(m.getFrom()[0]);
forward.addRecipient(
Message.RecipientType.TO,
new InternetAddress("[email protected]")); // Create your new message part
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Here you go with the original message:\n\n"); // Create a multi-part to combine the parts
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart); // Create and fill part for the forwarded content
messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(m.getDataHandler()); // Add part to multi part
multipart.addBodyPart(messageBodyPart); // Associate multi-part with message
forward.setContent(multipart); // Send message
Transport.send(forward); } catch (Exception e) {
e.printStackTrace();
}
}
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Here you go with the original message:\n\n");这个部分是加出来的.你不需要的,就去掉.假如你想设置编码的话,用MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Here you go with the original message:n\n","gb2312");