Search in sources :

Example 1 with NHINDAddressCollection

use of org.nhindirect.stagent.NHINDAddressCollection in project nhin-d by DirectProject.

the class DirectBounce method service.

/**
	 * {@inheritDoc}
	 */
@Override
public void service(Mail mail) throws MessagingException {
    final MimeMessage msg = mail.getMessage();
    final NHINDAddressCollection recipients = getMailRecipients(mail);
    final NHINDAddress sender = getMailSender(mail);
    final Tx txToTrack = getTxToTrack(msg, sender, recipients);
    // create a DSN message
    if (txToTrack != null && txToTrack.getMsgType() == TxMessageType.IMF)
        this.sendDSN(txToTrack, recipients, false);
}
Also used : NHINDAddress(org.nhindirect.stagent.NHINDAddress) Tx(org.nhindirect.common.tx.model.Tx) MimeMessage(javax.mail.internet.MimeMessage) NHINDAddressCollection(org.nhindirect.stagent.NHINDAddressCollection)

Example 2 with NHINDAddressCollection

use of org.nhindirect.stagent.NHINDAddressCollection in project nhin-d by DirectProject.

the class NotificationSuppressor method service.

/**
	 * {@inheritDoc}
	 */
@Override
public void service(Mail mail) throws MessagingException {
    boolean suppress = false;
    final MimeMessage msg = mail.getMessage();
    final NHINDAddressCollection recipients = getMailRecipients(mail);
    final NHINDAddress sender = getMailSender(mail);
    final Tx txToTrack = getTxToTrack(msg, sender, recipients);
    if (txToTrack != null) {
        try {
            // first check if this a MDN processed message and if the consume processed flag is turned on
            final TxDetail detail = txToTrack.getDetail(TxDetailType.DISPOSITION);
            if (consumeMDNProcessed && txToTrack.getMsgType() == TxMessageType.MDN && detail != null && detail.getDetailValue().contains(MDNStandard.Disposition_Processed))
                suppress = true;
            else // if the first rule does not apply, then go to the tx Service to see if the message should be suppressed
            if (txService != null && txToTrack != null && txService.suppressNotification(txToTrack))
                suppress = true;
        } catch (ServiceException e) {
            // failing to call the txService should not result in an exception being thrown
            // from this service.
            LOGGER.warn("Failed to get notification suppression status from service.  Message will assume to not need supressing.");
        }
    }
    if (suppress)
        mail.setState(Mail.GHOST);
}
Also used : NHINDAddress(org.nhindirect.stagent.NHINDAddress) Tx(org.nhindirect.common.tx.model.Tx) ServiceException(org.nhindirect.common.rest.exceptions.ServiceException) MimeMessage(javax.mail.internet.MimeMessage) NHINDAddressCollection(org.nhindirect.stagent.NHINDAddressCollection) TxDetail(org.nhindirect.common.tx.model.TxDetail)

Example 3 with NHINDAddressCollection

use of org.nhindirect.stagent.NHINDAddressCollection in project nhin-d by DirectProject.

the class DefaultSmtpAgent method processMessage.

/**
	 * Processes an message from an SMTP stack.  The bridge component between the SMTP stack and the SMTP agent is responsible for
	 * extracting the message, the recipient list, and the sender.  In some cases, the routing headers may have different information than
	 * what is populated in the SMTP MAIL FROM and RCTP TO headers.  In these cases, the SMTP headers should be favored over the routing
	 * headers in the message and passed as the recipient collection and sender to this method.
	 * @param message The message in the SMTP envelope.
	 * @param recipients The recipients of the message.  The RCTP TO headers should be used over the message routing headers.
	 * @param sender The send of the message. The MAIL FROM header should be used over the From: routing header in the message.
	 */
public MessageProcessResult processMessage(MimeMessage message, NHINDAddressCollection recipients, NHINDAddress sender) {
    GatewayState.getInstance().lockForProcessing();
    try {
        LOGGER.trace("Entering processMessage(MimeMessage, NHINDAddressCollection, NHINDAddress");
        MessageProcessResult retVal = null;
        verifyInitialized();
        preProcessMessage(message, sender);
        Collection<NHINDAddress> originalRecipList = new ArrayList<NHINDAddress>(recipients);
        DefaultMessageEnvelope envelopeToProcess = null;
        try {
            envelopeToProcess = new DefaultMessageEnvelope(new Message(message), recipients, sender);
            envelopeToProcess.setAgent(agent);
            // should always result in either a non null object or an exception
            MessageEnvelope processEvn = processEnvelope(envelopeToProcess);
            retVal = new MessageProcessResult(processEvn, null);
            if (retVal.getProcessedMessage() != null)
                postProcessMessage(retVal);
        } catch (SmtpAgentException e) {
            // rethrow
            LOGGER.trace("Exiting processMessage(MimeMessage, NHINDAddressCollection, NHINDAddress", e);
            throw e;
        } catch (Exception e) {
            // audit the message rejection
            if (envelopeToProcess != null) {
                Collection<AuditContext> contexts = createContextCollectionFromMessage(envelopeToProcess, Arrays.asList(AuditEvents.DEFAULT_HEADER_CONTEXT));
                if (e instanceof NHINDException) {
                    NHINDException exception = (NHINDException) e;
                    if (exception.getError() != null) {
                        contexts.add(new DefaultAuditContext(AuditEvents.REJECTED_MESSAGE_REASON_CONTEXT, exception.getError().toString()));
                        if (exception.getError() != null && exception.getError() instanceof AgentException && ((AgentException) exception.getError()).getError() == AgentError.NoTrustedRecipients) {
                            StringBuilder rejectedRecips = new StringBuilder();
                            int cnt = 0;
                            for (NHINDAddress address : originalRecipList) {
                                rejectedRecips.append(address.getAddress());
                                if (++cnt < originalRecipList.size())
                                    rejectedRecips.append(", ");
                            }
                            contexts.add(new DefaultAuditContext(AuditEvents.REJECTED_RECIPIENTS_CONTEXT, rejectedRecips.toString()));
                        }
                    }
                }
                auditor.audit(PRINICPAL, new AuditEvent(AuditEvents.REJECTED_MESSAGE_NAME, AuditEvents.EVENT_TYPE), contexts);
            }
            LOGGER.trace("Exiting processMessage(MimeMessage, NHINDAddressCollection, NHINDAddress", e);
            throw new SmtpAgentException(SmtpAgentError.Unknown, e);
        }
        LOGGER.trace("Exiting processMessage(MimeMessage, NHINDAddressCollection, NHINDAddress");
        return retVal;
    } finally {
        GatewayState.getInstance().unlockFromProcessing();
    }
}
Also used : DefaultAuditContext(org.nhindirect.common.audit.DefaultAuditContext) NotificationMessage(org.nhindirect.stagent.mail.notifications.NotificationMessage) IncomingMessage(org.nhindirect.stagent.IncomingMessage) Message(org.nhindirect.stagent.mail.Message) MimeMessage(javax.mail.internet.MimeMessage) OutgoingMessage(org.nhindirect.stagent.OutgoingMessage) DefaultMessageEnvelope(org.nhindirect.stagent.DefaultMessageEnvelope) AgentException(org.nhindirect.stagent.AgentException) ArrayList(java.util.ArrayList) NHINDException(org.nhindirect.stagent.NHINDException) DefaultMessageEnvelope(org.nhindirect.stagent.DefaultMessageEnvelope) MessageEnvelope(org.nhindirect.stagent.MessageEnvelope) MessagingException(javax.mail.MessagingException) AgentException(org.nhindirect.stagent.AgentException) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) NHINDException(org.nhindirect.stagent.NHINDException) NHINDAddress(org.nhindirect.stagent.NHINDAddress) NHINDAddressCollection(org.nhindirect.stagent.NHINDAddressCollection) Collection(java.util.Collection) AuditEvent(org.nhindirect.common.audit.AuditEvent)

Example 4 with NHINDAddressCollection

use of org.nhindirect.stagent.NHINDAddressCollection in project nhin-d by DirectProject.

the class TrackIncomingNotification method service.

/**
	 * {@inheritDoc}
	 */
@Override
public void service(Mail mail) throws MessagingException {
    LOGGER.debug("Calling track incoming notification service");
    final MimeMessage msg = mail.getMessage();
    final NHINDAddressCollection recipients = getMailRecipients(mail);
    final NHINDAddress sender = getMailSender(mail);
    final Tx txToMonitor = getTxToTrack(msg, sender, recipients);
    // track message
    if (txToMonitor != null && (txToMonitor.getMsgType() == TxMessageType.DSN || txToMonitor.getMsgType() == TxMessageType.MDN)) {
        try {
            txService.trackMessage(txToMonitor);
        }///CLOVER:OFF
         catch (ServiceException ex) {
            LOGGER.warn("Failed to submit message to monitoring service.", ex);
        }
    ///CLOVER:ON
    }
    LOGGER.debug("Exiting track incoming notification service");
}
Also used : NHINDAddress(org.nhindirect.stagent.NHINDAddress) Tx(org.nhindirect.common.tx.model.Tx) ServiceException(org.nhindirect.common.rest.exceptions.ServiceException) MimeMessage(javax.mail.internet.MimeMessage) NHINDAddressCollection(org.nhindirect.stagent.NHINDAddressCollection)

Example 5 with NHINDAddressCollection

use of org.nhindirect.stagent.NHINDAddressCollection in project nhin-d by DirectProject.

the class AbstractNotificationAwareMailet method getMailRecipients.

/**
	 * Get the recipients of Mail message by retrieving the recipient list from the SMTP envelope first, then falling back to the recipients
	 * in the message if the recipients cannot be retrieved from the SMTP envelope.
	 * @param mail The mail object that contains information from the SMTP envelope.
	 * @return Collection of message recipients.
	 * @throws MessagingException
	 */
@SuppressWarnings("unchecked")
protected NHINDAddressCollection getMailRecipients(Mail mail) throws MessagingException {
    final NHINDAddressCollection recipients = new NHINDAddressCollection();
    // uses the RCPT TO commands
    final Collection<MailAddress> recips = mail.getRecipients();
    if (recips == null || recips.size() == 0) {
        // fall back to the mime message list of recipients
        final Address[] recipsAddr = mail.getMessage().getAllRecipients();
        for (Address addr : recipsAddr) {
            recipients.add(new NHINDAddress(addr.toString(), (AddressSource) null));
        }
    } else {
        for (MailAddress addr : recips) {
            recipients.add(new NHINDAddress(addr.toString(), (AddressSource) null));
        }
    }
    return recipients;
}
Also used : NHINDAddress(org.nhindirect.stagent.NHINDAddress) MailAddress(org.apache.mailet.MailAddress) AddressSource(org.nhindirect.stagent.AddressSource) Address(javax.mail.Address) MailAddress(org.apache.mailet.MailAddress) InternetAddress(javax.mail.internet.InternetAddress) NHINDAddress(org.nhindirect.stagent.NHINDAddress) NHINDAddressCollection(org.nhindirect.stagent.NHINDAddressCollection)

Aggregations

NHINDAddressCollection (org.nhindirect.stagent.NHINDAddressCollection)18 NHINDAddress (org.nhindirect.stagent.NHINDAddress)15 MimeMessage (javax.mail.internet.MimeMessage)13 MailAddress (org.apache.mailet.MailAddress)7 Message (org.nhindirect.stagent.mail.Message)7 Tx (org.nhindirect.common.tx.model.Tx)6 MessageProcessResult (org.nhindirect.gateway.smtp.MessageProcessResult)5 NotificationMessage (org.nhindirect.stagent.mail.notifications.NotificationMessage)5 ArrayList (java.util.ArrayList)4 Collection (java.util.Collection)4 Address (javax.mail.Address)4 MessagingException (javax.mail.MessagingException)4 InternetAddress (javax.mail.internet.InternetAddress)4 Mail (org.apache.mailet.Mail)4 InvocationOnMock (org.mockito.invocation.InvocationOnMock)4 SmtpAgent (org.nhindirect.gateway.smtp.SmtpAgent)4 ServiceException (org.nhindirect.common.rest.exceptions.ServiceException)3 DefaultMessageEnvelope (org.nhindirect.stagent.DefaultMessageEnvelope)3 TxDetail (org.nhindirect.common.tx.model.TxDetail)2 AddressSource (org.nhindirect.stagent.AddressSource)2