Search in sources :

Example 1 with NHINDAddress

use of org.nhindirect.stagent.NHINDAddress 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 NHINDAddress

use of org.nhindirect.stagent.NHINDAddress 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 NHINDAddress

use of org.nhindirect.stagent.NHINDAddress 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 NHINDAddress

use of org.nhindirect.stagent.NHINDAddress 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 NHINDAddress

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

the class NotificationProducerTest method testProduceMDN_MultipleRecipients.

public void testProduceMDN_MultipleRecipients() throws Exception {
    NotificationSettings setting = new NotificationSettings(true, "", "");
    NotificationProducer prod = new NotificationProducer(setting);
    IncomingMessage msg = getMessageFromFile("MultipleRecipientsIncomingMessage.txt", Arrays.asList("cerner.com", "securehealthemail.com"));
    Collection<NotificationMessage> notes = prod.produce(msg);
    assertNotNull(notes);
    assertEquals(2, notes.size());
    boolean foundCernerCom = false;
    boolean foundSecureHealth = false;
    for (NHINDAddress noteMsg : msg.getDomainRecipients()) {
        if (noteMsg.toString().contains("cerner.com"))
            foundCernerCom = true;
        else if (noteMsg.toString().contains("securehealthemail.com"))
            foundSecureHealth = true;
    }
    assertTrue(foundCernerCom);
    assertTrue(foundSecureHealth);
}
Also used : NHINDAddress(org.nhindirect.stagent.NHINDAddress) NotificationMessage(org.nhindirect.stagent.mail.notifications.NotificationMessage) IncomingMessage(org.nhindirect.stagent.IncomingMessage)

Aggregations

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