To correlate the error message with original message and sending notification to sender is difficult and causes problem. For delivery status notifications the JavaMail API supports for resolve it. There are some techniques and heuristics for to overcome with this problem. One of the technique to set the return path in envelope. The java.mail.smtp.from represents the address where the bounced mails are sent and explained below with example in detail.
package firstmail; import java.util.Properties; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class bouncedmails { public static void main(String[] args) throws Exception { String smtpServer = "smtp.gmail.com"; int port = 465; final String userid = "9saireddy@gmail.com";//change accordingly final String password = "splesson";//change accordingly String contentType = "text/html"; String subject = "test: bounce an email to a different address " + "from the sender"; String from = "9saireddy@gmail.com"; String to = "bouncer@fauxmail.com";//some invalid address String bounceAddr = "9saireddy@gmail.com";//change accordingly String body = "Test: get message to bounce to a separate email address"; Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", smtpServer); props.put("mail.smtp.port", "465"); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.from", bounceAddr); Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userid, password); } }); MimeMessage message = new MimeMessage(mailSession); message.addFrom(InternetAddress.parse(from)); message.setRecipients(Message.RecipientType.TO, to); message.setSubject(subject); message.setContent(body, contentType); Transport transport = mailSession.getTransport(); try { System.out.println("Sending ...."); transport.connect(smtpServer, port, userid, password); transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO)); System.out.println("Sending done ..."); } catch (Exception e) { System.err.println("Error Sending: "); e.printStackTrace(); } transport.close(); }// end function main() }
Output
Sending .. Sent .
Class | Description |
---|---|
public class quota | It represents set of quotas from root of quota with set of resources, setsourcelimit(string name, long limit) is the method for resource class like STORAGE. |
public interface QuotaAwareStore | It represents an interface to implement which supports quotas, the setQuota, getQuota methods are defined by IMAP QUOTA extension and supported by quota model. IMAPStore, IMAPSSLStore, GmailStore, GmailSSLStore are the implementing class of interface. |
public static class Quota.Resource | It represents the each resource from root of quota. |
import java.util.Properties; import javax.mail.Quota; import javax.mail.Session; import javax.mail.Store; import com.sun.mail.imap.IMAPStore; public class QuotaExample { public static void main(String[] args) { try { Properties properties = new Properties(); properties.put("mail.store.protocol", "imaps"); properties.put("mail.imaps.port", "993"); properties.put("mail.imaps.starttls.enable", "true"); Session emailSession = Session.getDefaultInstance(properties); // emailSession.setDebug(true); // creating the IMAP3 store object and connect with the pop server Store store = emailSession.getStore("imaps"); // To change the user and password accordingly store.connect("imap.gmail.com", "abc@gmail.com", "*****"); IMAPStore imapStore = (IMAPStore) store; System.out.println("imapStore - " + imapStore); // To get quota Quota[] quotas = imapStore.getQuota("INBOX"); //Iterate through the Quotas for (Quota quota : quotas) { System.out.println(String.format("quotaRoot:'%s'", quota.quotaRoot)); //Iterate through the Quota Resource for (Quota.Resource resource : quota.resources) { System.out.println(String.format( "name:'%s', limit:'%s', usage:'%s'", resource.name, resource.limit, resource.usage)); } } } catch (Exception e) { e.printStackTrace(); } } }
Output
imapStore -imaps://abc%40gmail.com@imap.gmail.com quotaRoot:'' name:'STORAGE', limit:'15728640', usage:'513'
After getting the store object then have to fetch quota array and iterate it, print it. Here imap.gmail.com server is used for implementation of QuotaAwareStore by IMAPStore.
public abstract Class Folder extends Object
The function of this class have to declare the methods for deleting, searching for folder, listing messages in folder and requests named folders from the server. By using protected constructor have to create directly a folder. From session, store also have to get folder by using getFolder() method.
public abstract Folder getFolder(String name) throws MessagingException
Method | Description |
---|---|
boolean exists() | The function of this method is to check the folder exists really or not. |
abstract void open(int mode) | The function of this method is to open the folder if it is closed. |
abstract void close(boolean expunge) | The function of this method is to close the folder when the boolean value is true. |
abstract String getName() | The function of this method is to return name of folder. |
URLName getURLName() | The function of this <method is to return the URL name to represent particular folder. |
Store getStore() | The function of this method is to return the store object which specifies this folder. |
int getMode() | The function of this method is to return the mode from Folder.READ_ONLY, Folder.WRITE_ONLY. |
abstract boolean delete(boolean recurse) | The function of this method is to delete folder which is closed and when boolean returns true. |
void copy Message(Messages[] mess, Folder destination | The function of this method is to copy the message from one folder to specified folder. |
abstract Message expunge() | The function of this method is to remove the messages deleted from folder. |
Folder[] list() | The function of this method is to represent the list of array folders. |
abstract Folder[] list(String pattern) | The function of this method is to represent the folders list in pattern specifying string as name of folder. |
int getNewMessagesCount() | The function of this method is to return the count of new messages in folder while RECENT flag is set. |
Message[] getMessages() | The function of this method is to return the objects of message in which represents all messages in folder. |
Message[] search(SearchTerm term) | The function of this method is to return to search the messages from folders which matches the criteria and empty if matches not found. |
abstract Flags getPermanentFlags() | The function of this method is to represent that the flags to support all the messages by the folder. |
void setFlags(Message[] messages, Flags flag, boolean value) | The function of this method is to set the represented flag on message in array. |