Hi Eric, I tried with Squirrel mail. First the problem is the value in the mail_bytes itself is empty when the mail is getting stored in the mysql james_mail table. I am able to see the postmaster message in the inbox, but since the mail_bytes field is having empty value, I am unable to open that email in any mail client.
I am pasting my custom mailet code. package com.permitnonwebmail.mailet; import java.io.PrintWriter; import java.io.StringWriter; import java.net.UnknownHostException; import java.util.Collection; import java.util.Date; import java.util.HashSet; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.james.core.MailImpl; import org.apache.james.protocols.smtp.dsn.DSNStatus; import org.apache.james.transport.mailets.AbstractNotify; import org.apache.mailet.Mail; import org.apache.mailet.MailAddress; import org.apache.mailet.base.RFC2822Headers; import org.apache.mailet.base.RFC822DateFormat; import org.apache.mailet.base.mail.MimeMultipartReport; public class PermitNonWebMailMailet extends AbstractNotify { private static final Log LOGGER = LogFactory.getFactory().getInstance( PermitNonWebMailMailet.class); private static final RFC822DateFormat rfc822DateFormat = new RFC822DateFormat(); private String messageString = null; /** * Initialize the mailet */ public void init() throws MessagingException { super.init(); messageString = getInitParameter("messageString", "Denied access for Web Mail Clients.\n"); } /** * Service does the hard work and bounces the mail in the format specified * by RFC3464. * * @param mail * the mail to bounce * @throws MessagingException * if a problem arises formulating the redirected mail * * @see org.apache.mailet.Mailet#service(org.apache.mailet.Mail) */ public void service(Mail mail) throws MessagingException { LOGGER.info("Permit Non Web Mail Mailet Initialized...."); final MimeMessage msg = mail.getMessage(); if (null != msg && !msg.equals("")) { System.out.println("bounce method called"); // duplicates the Mail object, to be able to modify the new mail // keeping // the original untouched MailImpl newMail = new MailImpl(mail); try { // We don't need to use the original Remote Address and Host, // and doing so would likely cause a loop with spam detecting // matchers. try { newMail.setRemoteAddr(dns.getLocalHost().getHostName()); } catch (UnknownHostException e) { newMail.setRemoteHost("localhost"); } try { newMail.setRemoteHost(dns.getLocalHost().getHostAddress()); } catch (UnknownHostException e) { newMail.setRemoteAddr("127.0.0.1"); } if (mail.getSender() == null) { if (isDebug) log("Processing a bounce request for a message with an empty reverse-path. No bounce will be sent."); if (!getPassThrough(mail)) { mail.setState(Mail.GHOST); } return; } MailAddress reversePath = mail.getSender(); if (isDebug) log("Processing a bounce request for a message with a reverse path. The bounce will be sent to " + reversePath); Collection<MailAddress> newRecipients = new HashSet<MailAddress>(); newRecipients.add(reversePath); newMail.setRecipients(newRecipients); if (isDebug) { log("New mail - sender: " + newMail.getSender() + ", recipients: " + arrayToString(newMail.getRecipients().toArray()) + ", name: " + newMail.getName() + ", remoteHost: " + newMail.getRemoteHost() + ", remoteAddr: " + newMail.getRemoteAddr() + ", state: " + newMail.getState() + ", lastUpdated: " + newMail.getLastUpdated() + ", errorMessage: " + newMail.getErrorMessage()); } // create the bounce message MimeMessage newMessage = new MimeMessage( Session.getDefaultInstance(System.getProperties(), null)); MimeMultipartReport multipart = new MimeMultipartReport(); multipart.setReportType("delivery-status"); // part 1: descriptive text message MimeBodyPart part1 = new MimeBodyPart(); part1.setText(messageString); multipart.addBodyPart(part1); // stuffing all together newMessage.setHeader(RFC2822Headers.CONTENT_TYPE, multipart.getContentType()); newMessage.setContent(multipart); newMail.setMessage(newMessage); // Set additional headers setRecipients(newMail, getRecipients(mail), mail); setTo(newMail, getTo(mail), mail); setSubjectPrefix(newMail, getSubjectPrefix(mail), mail); if (newMail.getMessage().getHeader(RFC2822Headers.DATE) == null) { newMail.getMessage().setHeader(RFC2822Headers.DATE, rfc822DateFormat.format(new Date())); } setReplyTo(newMail, getReplyTo(mail), mail); setReversePath(newMail, getReversePath(mail), mail); setSender(newMail, getSender(mail), mail); setIsReply(newMail, isReply(mail), mail); // newMail.getMessage().saveChanges(); getMailetContext().sendMail(newMail); } catch (Exception e) { e.printStackTrace(); } finally { newMail.dispose(); } // ghosting the original mail if (getPassThrough(mail)) { mail.setState(Mail.GHOST); } } } /** * Create a MimeBodyPart with a textual description for human readers. * * @param mail * @return MimeBodyPart * @throws MessagingException */ protected MimeBodyPart createTextMsg(Mail mail) throws MessagingException { MimeBodyPart part1 = new MimeBodyPart(); StringWriter sout = new StringWriter(); PrintWriter out = new PrintWriter(sout, true); StringBuffer bounceBuffer = new StringBuffer(128) .append("Denied access to Web Clients."); out.println(bounceBuffer.toString()); out.println(); part1.setText(sout.toString()); return part1; } /** * Guessing status code by the exception provided. This method should use * the status attribute when the SMTP-handler some when provides it * * @param me * the MessagingException of which the statusCode should be * generated * @return status the generated statusCode */ protected String getStatus(MessagingException me) { return DSNStatus .getStatus(DSNStatus.PERMANENT, DSNStatus.SECURITY_AUTH); } public String getMailetInfo() { return "DSNBounce Mailet"; } /** Gets the expected init parameters. */ protected String[] getAllowedInitParameters() { String[] allowedArray = { "debug", "passThrough", "messageString", "attachment", "sender", "prefix" }; return allowedArray; } /** * @return the <code>attachment</code> init parameter, or * <code>MESSAGE</code> if missing */ protected int getAttachmentType() throws MessagingException { return getTypeCode(getInitParameter("attachment", "message")); } /** * @return <code>SpecialAddress.REVERSE_PATH</code> */ protected Collection<MailAddress> getRecipients() { Collection<MailAddress> newRecipients = new HashSet<MailAddress>(); newRecipients.add(SpecialAddress.REVERSE_PATH); return newRecipients; } /** * @return <code>SpecialAddress.REVERSE_PATH</code> */ protected InternetAddress[] getTo() { InternetAddress[] apparentlyTo = new InternetAddress[1]; apparentlyTo[0] = SpecialAddress.REVERSE_PATH.toInternetAddress(); return apparentlyTo; } /** * @return <code>SpecialAddress.NULL</code> (the meaning of bounce) */ protected MailAddress getReversePath(Mail mail) { return SpecialAddress.NULL; } } Appreciate your help. Thank you, Regards, Rajender On Mon, Jan 14, 2013 at 1:36 PM, Eric Charles <e...@apache.org> wrote: > Hi Rajender, > > I tried on my local trunk and get the original message attached to the > bounce. It's true that my client (thunderbird) does not allow to open the > attachement as a real mail, but shows it as plain text. > > Can you check the source of the bounce mail and see if this is not an issue > with the mail client you are using. > > Thx, Eric > > > On 13/01/2013 15:37, Rajender Vallapureddy wrote: >> >> Hi Eric, >> >> I replicated the DNSBounce to send custom bounce with postmaster.. >> >> I am able to send / receive the postmaster message, but I am unable >> see any body message in it. >> >> I am using mysql and in the "james_mail.mail_bytes" field all I am >> seeing is empty blob and when I try to open that mail in squirrel mail >> its giving me the imap error. >> >> >> My class is exact the DNSBounce.java except for few conditions when to >> send the bounce mail. >> >> MailImpl newMail = new MailImpl(mail); >> newMail.setRemoteAddr(dns.getLocalHost().getHostName()); >> newMail.setRemoteHost(dns.getLocalHost().getHostAddress()); >> MailAddress reversePath = mail.getSender(); >> Collection<MailAddress> newRecipients = new HashSet<MailAddress>(); >> newRecipients.add(reversePath); >> newMail.setRecipients(newRecipients); >> MimeMessage newMessage = new >> MimeMessage(Session.getDefaultInstance(System.getProperties(), null)); >> MimeMultipartReport multipart = new MimeMultipartReport(); >> multipart.setReportType("delivery-status"); >> MimeBodyPart part1 = new MimeBodyPart(); >> part1.setText(messageString); // message from this part is missing in >> the mail body. >> multipart.addBodyPart(part1); >> newMessage.setHeader(RFC2822Headers.CONTENT_TYPE, >> multipart.getContentType()); >> newMessage.setContent(multipart); >> newMail.setMessage(newMessage); >> setRecipients(newMail, getRecipients(mail), mail); >> setTo(newMail, getTo(mail), mail); >> setSubjectPrefix(newMail, getSubjectPrefix(mail), mail); >> newMail.getMessage().setHeader(RFC2822Headers.DATE, >> rfc822DateFormat.format(new Date())); >> setReplyTo(newMail, getReplyTo(mail), mail); >> setReversePath(newMail, getReversePath(mail), mail); >> setSender(newMail, getSender(mail), mail); >> setIsReply(newMail, isReply(mail), mail); >> newMail.getMessage().saveChanges(); >> getMailetContext().sendMail(newMail); >> >> >> Please suggest me what is causing the body message part to be missing >> from the mail send. >> >> Appreciate your help. >> >> Thank you, >> Regards, >> Rajender >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org >> For additional commands, e-mail: server-dev-h...@james.apache.org >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org > For additional commands, e-mail: server-dev-h...@james.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org