java - Javamail reply removing or modifying message-id header -
i want modify or remove "message-id" header when replying email javamail. after research found out need create custom class extends mimemessage. here class have created.
import javax.mail.messagingexception; import javax.mail.session; import javax.mail.internet.mimemessage; class mymessage extends mimemessage { public mymessage(session session) { super(session); } @override protected void updatemessageid() throws messagingexception { removeheader("message-id"); } } the code below related fetching messages
public list<emailsenderinfo> checkemail() throws exception { string host = "host"; string username = "myusername"; string password = "mypass"; list<emailsenderinfo> emailsenderlist = new arraylist<emailsenderinfo>(); properties properties = system.getproperties(); properties.setproperty("mail.store.protocol", "imaps"); session session = session.getdefaultinstance(properties); store store = session.getstore("imaps"); store.connect(host, username, password); /* * folder[] f = store.getdefaultfolder().list(); (folder fd : f) * system.out.println(">> " + fd.getname()); */ folder folder = store.getfolder("inbox"); if (!folder.exists()) { system.out.println("no inbox..."); system.exit(0); } folder.open(folder.read_write); message[] msg = folder.getmessages(); if (msg.length < 1) { system.out.println("no new messages!"); throw new exception("no new messages!"); } (int = 0; < msg.length; i++) { if (!msg[i].isset(flag.seen)) { emailsenderinfo emailsenderinfo = new emailsenderinfo(); emailsenderinfo.message = msg[i]; system.out.println("------------ message " + (i + 1) + " ------------"); // string = internetaddress.tostring(msg[i].getfrom()); address[] fromarray = msg[i].getfrom(); internetaddress frominternetaddress = (internetaddress) fromarray[0]; string = frominternetaddress.getaddress(); string fromname = frominternetaddress.getpersonal(); if (fromname != null) { emailsenderinfo.fromname = fromname; } if (from != null) { // system.out.println("from: " + from); emailsenderinfo.from = from; } // string replyto = internetaddress.tostring(msg[i].getreplyto()); address[] replytoarray = msg[i].getfrom(); internetaddress replytointernetaddress = (internetaddress) replytoarray[0]; string replyto = replytointernetaddress.getaddress(); string replytoname = replytointernetaddress.getpersonal(); if (replyto != null) { // system.out.println("reply-to: " + replyto); emailsenderinfo.replyto = replyto; } if (replytoname != null) { // system.out.println("reply-to: " + replyto); emailsenderinfo.replytoname = replytoname; } string = internetaddress.tostring(msg[i].getrecipients(message.recipienttype.to)); if (to != null) { // system.out.println("to: " + to); emailsenderinfo.to = to; } string subject = msg[i].getsubject(); if (subject != null) { // system.out.println("subject: " + subject); emailsenderinfo.subject = subject; } date sentdate = msg[i].getsentdate(); if (sentdate != null) { system.out.println("sent: " + sentdate); emailsenderinfo.sentdate = sentdate; } string bodyhtml = ""; // content multipart multipart = (multipart) msg[i].getcontent(); (int x = 0; x < multipart.getcount(); x++) { bodypart bodypart = multipart.getbodypart(x); string disposition = bodypart.getdisposition(); if (part.attachment.equalsignorecase(bodypart.getdisposition())) { // dealing attachments system.out.println("mail has attachment : "); datahandler handler = bodypart.getdatahandler(); system.out.println("file name : " + handler.getname()); system.out.println("ddddd: " + bodypart.getcontent().tostring()); } else { string classtype = bodypart.getcontent().getclass().tostring(); if (classtype.contains("java.lang.string")) { bodyhtml = bodypart.getcontent().tostring(); } else if (classtype.contains("javax.mail.internet.mimemultipart")) { mimemultipart bodycontent = (mimemultipart) bodypart.getcontent(); (int b = 0; b < bodycontent.getcount(); b++) { imapbodypart imapbody = (imapbodypart) bodycontent.getbodypart(b); system.out.println("1: " + imapbody.getcontent()); bodyhtml = imapbody.getcontent().tostring(); // system.out.println("2: " + bodycontent.getbodypart(b)); // system.out.println("3: " + bodypart.getcontent().tostring()); } } } emailsenderinfo.bodyhtml = bodyhtml; } mymessage reply = (mymessage) msg[i].reply(false); emailsenderinfo.reply = reply; // reply.setfrom(msg[i].getfrom()[0]); mimemessage orig = (mimemessage) msg[i]; stringbuffer buffer = new stringbuffer("thanks\n\n"); if (orig.ismimetype("text/plain")) { string content = (string) orig.getcontent(); stringreader contentreader = new stringreader(content); bufferedreader br = new bufferedreader(contentreader); string contentline; while ((contentline = br.readline()) != null) { buffer.append("> "); buffer.append(contentline); buffer.append("\r\n"); } } // set reply content // reply.settext(buffer.tostring()); // emailsenderinfo.reply = reply; emailsenderlist.add(emailsenderinfo); // system.out.println(); }// end if unread } folder.close(true); store.close(); return emailsenderlist; } i have 2 methods in program. 1 of them checks mail , 1 replies emails.
message reply = msg[i].reply(false); "reply" gets passed method along other parameters.
public void sendreply(string from, string replyto, message reply, string messagereply, boolean attachment) throws exception { string host = "myhost"; string username = "myusername"; string pass = "mypassword"; properties props = system.getproperties(); props.put("mail.smtp.starttls.enable", "true"); // added line props.put("mail.smtp.host", host); props.put("mail.smtp.user", username); props.put("mail.smtp.password", pass); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); session session = session.getdefaultinstance(props); mimemessage mimereply = (mimemessage) reply; mimereply.setfrom((address) internetaddress.parse(from)[0]); bodypart messagebodypart = new mimebodypart(); messagebodypart.setcontent(messagereply, "text/html"); multipart multipart = new mimemultipart(); // set text message part multipart.addbodypart(messagebodypart); if (attachment) { messagebodypart = new mimebodypart(); string filename = "test.jpg"; datasource source = new filedatasource(filename); messagebodypart.setdatahandler(new datahandler(source)); messagebodypart.setfilename(filename); multipart.addbodypart(messagebodypart); } mimereply.setcontent(multipart); transport transport = session.gettransport("smtp"); transport.connect(host, username, pass); transport.sendmessage(mimereply, internetaddress.parse(replyto)); transport.close(); system.out.println("message sent!"); } i have use mymessage class in order remove "message-id" header. have tried following
mymessage mimereply = (mymessage) reply; but following error in runtime
java.lang.classcastexception: javax.mail.internet.mimemessage cannot cast javamailer.mymessage how can use "mymessage" class can remove "message-id" header reply message?
you can try following:
when replying email:
when create message create, right should like:
mimemessage msg = new mimemessage(session); change to,
mymessage msg = new mymessage(session); when checking email don't need remove header message in mailbox, think need when replying mail @ instance name mail instantiate :
mymessage msg = new mymessage(session); msg.updatemessageid(); since using reference existing message:
you can like:
create new constructor:
public mymessage (mimemessage message) { super(message); } when replying:
mymessage mimereply = new mymessage(reply); mimereply.updatemessageid(); then send mimereply not reply.
Comments
Post a Comment