/** * Constructs an envelope from another envelope. * @param message The message envelope. */ protected DefaultMessageEnvelope(MessageEnvelope envelope) { agent = envelope.getAgent(); message = envelope.getMessage(); recipients = envelope.getRecipients(); sender = envelope.getSender(); }
protected void onPostprocessMessage(SMTPMailMessage mail, MessageProcessResult result, boolean isOutgoing, Tx tx) { // if there are rejected recipients and an outgoing IMF message, then we need to send a DSN message if (isOutgoing && tx != null && tx.getMsgType() == TxMessageType.IMF && result.getProcessedMessage().hasRejectedRecipients()) sendDSN(tx, result.getProcessedMessage().getRejectedRecipients(), true); }
private void postProcessOutgoingMessage(MessageProcessResult result) { if (result.getProcessedMessage().hasRecipients()) copyMessage(result.getProcessedMessage().getMessage(), settings.getOutgoingMessageSettings()); }
protected void checkEnvelopeAddresses(MessageEnvelope envelope) { this.checkEnvelopeAddresses(envelope.getRecipients(), envelope.getSender()); }
public boolean isOutgoing(MessageEnvelope envelope) { // if the sender is not from our domain, then is has to be an incoming message if (!envelope.getSender().isInDomain(agent.getDomains())) return false; else { // depending on the SMTP stack configuration, a message with a sender from our domain // may still be an incoming message... check if the message is encrypted if (SMIMEStandard.isEncrypted(envelope.getMessage())) { return false; } } return true; }
if (result.getProcessedMessage() != null) smtpMessage = new SMTPMailMessage((MimeMessage)result.getProcessedMessage().getMessage(), (List<InternetAddress>)recipients.toInternetAddressCollection(), (InternetAddress)sender); if (result.getProcessedMessage().getRejectedRecipients() != null && result.getProcessedMessage().getRejectedRecipients().size() > 0 && smtpMessage.getRecipientAddresses() != null && smtpMessage.getRecipientAddresses().size() > 0) for (InternetAddress rctpAdd : smtpMessage.getRecipientAddresses()) if (!MessageUtils.isRcptRejected(rctpAdd, result.getProcessedMessage().getRejectedRecipients()))
if (env.getMessage().getAllRecipients() != null) for (Address toRecip : env.getMessage().getAllRecipients()) authRecips.add(((InternetAddress)toRecip).getAddress().toLowerCase()); if (env.getRecipients() != null) for (NHINDAddress envRecips : env.getRecipients())
private void postProcessIncomingMessage(MessageProcessResult result) this.copyMessage(result.getProcessedMessage().getMessage(), settings.getIncomingMessageSettings()); if (NotificationHelper.isMDN(result.getProcessedMessage().getMessage()))
private void postProcessMessage(MessageProcessResult result) { boolean isOutgoing = (result.getProcessedMessage() instanceof OutgoingMessage); // check for rejected recipients if (auditor != null && result.getProcessedMessage().getRejectedRecipients() != null && result.getProcessedMessage().getRejectedRecipients().size() > 0) { Collection<AuditContext> contexts = createContextCollectionFromMessage(result.getProcessedMessage(), Arrays.asList(AuditEvents.DEFAULT_HEADER_CONTEXT)); StringBuffer rejectedRecips = new StringBuffer(); int cnt = 0; for (NHINDAddress address : result.getProcessedMessage().getRejectedRecipients()) { rejectedRecips.append(address.getAddress()); if (++cnt < result.getProcessedMessage().getRejectedRecipients().size()) rejectedRecips.append(", "); } contexts.add(new DefaultAuditContext(AuditEvents.REJECTED_RECIPIENTS_CONTEXT, rejectedRecips.toString())); auditor.audit(PRINICPAL, new AuditEvent(AuditEvents.REJECTED_RECIP_NAME, AuditEvents.EVENT_TYPE), contexts); } if (isOutgoing) postProcessOutgoingMessage(result); else postProcessIncomingMessage(result); }
theHeader = env.getSender().getAddress(); else if (header.equals(MDNStandard.Headers.Disposition) || header.equals(MDNStandard.Headers.OriginalMessageID) || header.equals(MDNStandard.Headers.FinalRecipient)) Message msg = env.getMessage(); InternetHeaders notHeaders = null; try theHeader = env.getMessage().getHeader(header, ",");
mail.setMessage(result.getProcessedMessage().getMessage()); if (result.getProcessedMessage().getRejectedRecipients() != null && result.getProcessedMessage().getRejectedRecipients().size() > 0 && mail.getRecipients() != null && mail.getRecipients().size() > 0) for (MailAddress rctpAdd : (Collection<MailAddress>)mail.getRecipients()) if (!MessageUtils.isRcptRejected(rctpAdd.toInternetAddress(), result.getProcessedMessage().getRejectedRecipients()))
final MimeMessage canonicalizedMsg = canonicalizeMessage(envelope.getMessage()); ((DefaultMessageEnvelope)envelope).setMessage(new Message(canonicalizedMsg)); LOGGER.debug("Sending outgoing message from " + envelope.getSender().toString() + " to STAgent"); LOGGER.debug("Sending incoming message from " + envelope.getSender().toString() + " to STAgent");
/** * Overridable method for custom processing after the message has been processed by the SMTP agent. Includes the tracking information * if available and the message direction. For passivity, this method calls {@link #onPostprocessMessage(Mail, MessageProcessResult)} * by default after performing its operations. * @param mail The incoming mail message. The contents of the message may have changed from when it was originally * received. * @param result Contains results of the message processing including the resulting message. * @param isOutgoing Indicate the direction of the message: incoming or outgoing. * @param tx Contains tracking information if available. */ protected void onPostprocessMessage(Mail mail, MessageProcessResult result, boolean isOutgoing, Tx tx) { // if there are rejected recipients and an outgoing IMF message, then we may need to send a DSN message if (isOutgoing && tx != null && tx.getMsgType() == TxMessageType.IMF && result.getProcessedMessage().hasRejectedRecipients()) sendDSN(tx, result.getProcessedMessage().getRejectedRecipients(), true); this.onPostprocessMessage(mail, result); }