下面列出了怎么用javax.mail.search.SubjectTerm的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Check mail folder for an email using subject.
*
* @param emailSubject Email subject
* @param folder mail folder to check for an email
* @param protocol protocol used to connect to the server
* @return whether mail received or not
* @throws MessagingException if we're unable to connect to the store
*/
private static boolean isMailReceivedBySubject(String emailSubject, String folder, String protocol,
GreenMailUser user) throws MessagingException {
boolean emailReceived = false;
Folder mailFolder;
Store store = getConnection(user, protocol);
try {
mailFolder = store.getFolder(folder);
mailFolder.open(Folder.READ_WRITE);
SearchTerm searchTerm = new AndTerm(new SubjectTerm(emailSubject), new BodyTerm(emailSubject));
Message[] messages = mailFolder.search(searchTerm);
for (Message message : messages) {
if (message.getSubject().contains(emailSubject)) {
log.info("Found the Email with Subject : " + emailSubject);
emailReceived = true;
break;
}
}
} finally {
if (store != null) {
store.close();
}
}
return emailReceived;
}
/**
* Searches for messages with a specific subject
*
* @param subject Subject to search messages for
* @param unreadOnly Indicate whether to only return matched messages that are unread
* @param maxToSearch maximum number of messages to search, starting from the latest. For example,
* enter 100 to search through the last 100 messages.
*/
public Message[] getMessagesBySubject(String subject, boolean unreadOnly, int maxToSearch) throws Exception {
Map<String, Integer> indices = getStartAndEndIndices(maxToSearch);
Message messages[] = folder.search(
new SubjectTerm(subject),
folder.getMessages(indices.get("startIndex"), indices.get("endIndex")));
if (unreadOnly) {
List<Message> unreadMessages = new ArrayList<Message>();
for (Message message : messages) {
if (isMessageUnread(message)) {
unreadMessages.add(message);
}
}
messages = unreadMessages.toArray(new Message[]{});
}
return messages;
}
/**
* Check mail folder for an email using subject.
*
* @param emailSubject Email subject
* @param folder mail folder to check for an email
* @param protocol protocol used to connect to the server
* @return whether mail received or not
* @throws MessagingException if we're unable to connect to the store
*/
private static boolean isMailReceivedBySubject(String emailSubject, String folder, String protocol,
GreenMailUser user) throws MessagingException {
boolean emailReceived = false;
Folder mailFolder;
Store store = getConnection(user, protocol);
try {
mailFolder = store.getFolder(folder);
mailFolder.open(Folder.READ_WRITE);
SearchTerm searchTerm = new AndTerm(new SubjectTerm(emailSubject), new BodyTerm(emailSubject));
Message[] messages = mailFolder.search(searchTerm);
for (Message message : messages) {
if (message.getSubject().contains(emailSubject)) {
log.info("Found the Email with Subject : " + emailSubject);
emailReceived = true;
break;
}
}
} finally {
if (store != null) {
store.close();
}
}
return emailReceived;
}
private static SearchTermBuilder createTextSearchTermBuilder() {
return new SearchTermBuilder() {
@Override
public SearchTerm build() {
String query = getParameters().get(0);
SearchTerm[] terms = {
new RecipientStringTerm(Message.RecipientType.TO, query),
new RecipientStringTerm(Message.RecipientType.CC, query),
new RecipientStringTerm(Message.RecipientType.BCC, query),
new FromStringTerm(query),
new SubjectTerm(query),
new BodyTerm(query)
};
return new OrTerm(terms);
}
};
}
/**
* Check a particular email has received to a given email folder by email subject.
*
* @param emailSubject - Email emailSubject to find email is in inbox or not
* @return - found the email or not
* @throws ESBMailTransportIntegrationTestException - Is thrown if an error occurred while reading the emails
*/
public static boolean isMailReceivedBySubject(String emailSubject, String folder)
throws ESBMailTransportIntegrationTestException {
boolean emailReceived = false;
Folder mailFolder;
Store store = getConnection();
try {
mailFolder = store.getFolder(folder);
mailFolder.open(Folder.READ_WRITE);
SearchTerm searchTerm = new AndTerm(new SubjectTerm(emailSubject), new BodyTerm(emailSubject));
Message[] messages = mailFolder.search(searchTerm);
for (Message message : messages) {
if (message.getSubject().contains(emailSubject)) {
log.info("Found the email emailSubject : " + emailSubject);
emailReceived = true;
break;
}
}
return emailReceived;
} catch (MessagingException ex) {
log.error("Error when getting mail count ", ex);
throw new ESBMailTransportIntegrationTestException("Error when getting mail count ", ex);
} finally {
if (store != null) {
try {
store.close();
} catch (MessagingException e) {
log.warn("Error when closing the store ", e);
}
}
}
}
/**
* Set filter on subject.
*
* @param subject messages will be filtered on subject
* @param notTerm negate condition
*/
public void setSubjectTerm( String subject, boolean notTerm ) {
if ( !Utils.isEmpty( subject ) ) {
if ( notTerm ) {
addSearchTerm( new NotTerm( new SubjectTerm( subject ) ) );
} else {
addSearchTerm( new SubjectTerm( subject ) );
}
}
}
/**
* Valid activation email.
*
* @param mailHost
* example: imap.gmail.com
* @param mailUser
* login of mail box
* @param mailPassword
* password of mail box
* @param senderMail
* sender of mail box
* @param subjectMail
* subject of mail box
* @param firstCssQuery
* the first matching element
* @param conditions
* list of 'expected' values condition and 'actual' values ({@link com.github.noraui.gherkin.GherkinStepCondition}).
* @throws TechnicalException
* is throws if you have a technical error (format, configuration, datas, ...) in NoraUi.
* Exception with message and with screenshot and with exception if functional error but no screenshot and no exception if technical error.
* @throws FailureException
* if the scenario encounters a functional error
*/
@Experimental(name = "validActivationEmail")
@RetryOnFailure(attempts = 3, delay = 60)
@Conditioned
@Et("Je valide le mail d'activation {string}(\\?)")
@And("I valid activation email {string}(\\?)")
public void validActivationEmail(String mailHost, String mailUser, String mailPassword, String senderMail, String subjectMail, String firstCssQuery, List<GherkinStepCondition> conditions)
throws FailureException, TechnicalException {
try {
final Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imap");
final Session session = Session.getDefaultInstance(props, null);
final Store store = session.getStore("imaps");
store.connect(mailHost, mailUser, mailPassword);
final Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
final SearchTerm filterA = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
final SearchTerm filterB = new FromTerm(new InternetAddress(senderMail));
final SearchTerm filterC = new SubjectTerm(subjectMail);
final SearchTerm[] filters = { filterA, filterB, filterC };
final SearchTerm searchTerm = new AndTerm(filters);
final Message[] messages = inbox.search(searchTerm);
for (final Message message : messages) {
validateActivationLink(subjectMail, firstCssQuery, message);
}
} catch (final Exception e) {
new Result.Failure<>("", Messages.format(Messages.getMessage(Messages.FAIL_MESSAGE_MAIL_ACTIVATION), subjectMail), false, Context.getCallBack(Callbacks.RESTART_WEB_DRIVER));
}
}
/**
* Check a particular email has received to a given email folder by email subject.
*
* @param emailSubject - Email emailSubject to find email is in inbox or not
* @return - found the email or not
* @throws ESBMailTransportIntegrationTestException - Is thrown if an error occurred while reading the emails
*/
public static boolean isMailReceivedBySubject(String emailSubject, String folder)
throws ESBMailTransportIntegrationTestException {
boolean emailReceived = false;
Folder mailFolder;
Store store = getConnection();
try {
mailFolder = store.getFolder(folder);
mailFolder.open(Folder.READ_WRITE);
SearchTerm searchTerm = new AndTerm(new SubjectTerm(emailSubject), new BodyTerm(emailSubject));
Message[] messages = mailFolder.search(searchTerm);
for (Message message : messages) {
if (message.getSubject().contains(emailSubject)) {
log.info("Found the email emailSubject : " + emailSubject);
emailReceived = true;
break;
}
}
return emailReceived;
} catch (MessagingException ex) {
log.error("Error when getting mail count ", ex);
throw new ESBMailTransportIntegrationTestException("Error when getting mail count ", ex);
} finally {
if (store != null) {
try {
store.close();
} catch (MessagingException e) {
log.warn("Error when closing the store ", e);
}
}
}
}
/**
* Reads the latest email with the given subject from the email inbox.
*
* @param subject
* the email subject
* @return the email body or null if no email was found
* @throws Exception
*/
public String readLatestEmailWithSubject(String subject) throws Exception {
Store store = mailSession.getStore();
store.connect();
Folder folder = store.getFolder(MAIL_INBOX);
folder.open(Folder.READ_WRITE);
Message[] messages = null;
messages = folder.search(new SubjectTerm(subject));
String body = null;
if (messages.length > 0) {
Message latest = messages[0];
for (Message m : messages) {
if (latest.getSentDate().compareTo(m.getSentDate()) < 0) {
latest = m;
}
}
body = (String) latest.getContent();
}
folder.close(false);
store.close();
return body;
}
private static SearchTermBuilder createORTermBuilder() {
return new SearchTermBuilder() {
@Override
public SearchTerm build() {
return new OrTerm(new SubjectTerm(getParameters().get(0)),new SubjectTerm(getParameters().get(1)));
}
}; }
private static SearchTermBuilder createSubjectTermBuilder() {
return new SearchTermBuilder() {
@Override
public SearchTerm build() {
return new SubjectTerm(getParameters().get(0));
}
};
}
/**
* Set filter on subject.
*
* @param subject
* messages will be filtered on subject
* @param notTerm
* negate condition
*/
public void setSubjectTerm( String subject, boolean notTerm ) {
if ( !Utils.isEmpty( subject ) ) {
if ( notTerm ) {
addSearchTerm( new NotTerm( new SubjectTerm( subject ) ) );
} else {
addSearchTerm( new SubjectTerm( subject ) );
}
}
}