As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
<property name="emailMessageHandlerMap"> <map> <entry key="cm:folder"> <ref bean="folderEmailMessageHandler"></ref> </entry> <entry key="cm:content"> <ref bean="documentEmailMessageHandler"></ref> </entry> </map> </property>
<bean id="emailService" class="org.alfresco.email.server.EmailServiceImpl"> <property name="emailInboundEnabled"> <value>${email.inbound.enabled}</value> </property> <property name="unknownUser"> <value>${email.inbound.unknownUser}</value> </property> <property name="emailMessageHandlerMap"> <map> <entry key="cm:folder"> <ref bean="folderEmailMessageHandler"></ref> </entry> <entry key="cm:content"> <ref bean="documentEmailMessageHandler"></ref> </entry> <entry key="fm:forum"> <ref bean="forumEmailMessageHandler"></ref> </entry> <entry key="fm:discussion"> <ref bean="forumEmailMessageHandler"></ref> </entry> <entry key="fm:topic"> <ref bean="topicEmailMessageHandler"></ref> </entry> <entry key="fm:post"> <ref bean="topicEmailMessageHandler"></ref> </entry> </map> </property> <property name="namespaceService"> <ref bean="NamespaceService" /> </property> <property name="nodeService"> <ref bean="NodeService" /> </property> <property name="searchService"> <ref bean="SearchService" /> </property> <property name="retryingTransactionHelper"> <ref bean="retryingTransactionHelper" /> </property> </bean>
void processMessage(NodeRef nodeRef, EmailMessage message)
<bean id="emailService" class="org.alfresco.email.server.EmailServiceImpl"> <property name="emailInboundEnabled"> <value>${email.inbound.enabled}</value> </property> <property name="unknownUser"> <value>${email.inbound.unknownUser}</value> </property> <property name="emailMessageHandlerMap"> <map> <entry key="cm:folder"> <ref bean="folderEmailMessageHandler"></ref> </entry> <entry key="cm:content"> <ref bean="customDocumentEmailMessageHandler"></ref> </entry> <entry key="fm:forum"> <ref bean="forumEmailMessageHandler"></ref> </entry> <entry key="fm:discussion"> <ref bean="forumEmailMessageHandler"></ref> </entry> <entry key="fm:topic"> <ref bean="topicEmailMessageHandler"></ref> </entry> <entry key="fm:post"> <ref bean="topicEmailMessageHandler"></ref> </entry> </map> </property> <property name="namespaceService"> <ref bean="NamespaceService" /> </property> <property name="nodeService"> <ref bean="NodeService" /> </property> <property name="searchService"> <ref bean="SearchService" /> </property> <property name="retryingTransactionHelper"> <ref bean="retryingTransactionHelper" /> </property> </bean> <bean id="customDocumentEmailMessageHandler" parent="emailMessageHandlerBase" class="your.package.written.here.CustomDocumentEmailMessageHandler" />
/** * Process the message. Method is called after filtering by sender's address. * * @param nodeRef Addressed node (target node). * @param message Email message * @throws EmailMessageException Any exception occured inside the method will be converted and thrown as EmailMessageException */ private void processMessage(final NodeRef nodeRef, final EmailMessage message) { if (!emailInboundEnabled) { throw new EmailMessageException(ERR_INBOUND_EMAIL_DISABLED); } try { // Get the username for the process using the system account final RetryingTransactionCallback<String> getUsernameCallback = new RetryingTransactionCallback<String>() { public String execute() throws Throwable { String from = message.getFrom(); return getUsername(from); } }; RunAsWork<String> getUsernameRunAsWork = new RunAsWork<String>() { public String doWork() throws Exception { return retryingTransactionHelper.doInTransaction(getUsernameCallback, false); } }; String username = AuthenticationUtil.runAs(getUsernameRunAsWork, AuthenticationUtil.SYSTEM_USER_NAME); // Process the message using the username's account final RetryingTransactionCallback<Object> processMessageCallback = new RetryingTransactionCallback<Object>() { public Object execute() throws Throwable { String recipient = message.getTo(); NodeRef targetNodeRef = null; if (nodeRef == null) { targetNodeRef = getTargetNode(recipient); } else { targetNodeRef = nodeRef; } EmailMessageHandler messageHandler = getMessageHandler(targetNodeRef); messageHandler.processMessage(targetNodeRef, message); return null; } }; RunAsWork<Object> processMessageRunAsWork = new RunAsWork<Object>() { public Object doWork() throws Exception { return retryingTransactionHelper.doInTransaction(processMessageCallback, false); } }; AuthenticationUtil.runAs(processMessageRunAsWork, username); } catch (EmailMessageException e) { // These are email-specific errors throw e; } catch (AccessDeniedException e) { throw new EmailMessageException(ERR_ACCESS_DENIED, message.getFrom(), message.getTo()); } catch (IntegrityException e) { throw new EmailMessageException(ERR_INVALID_SUBJECT); } catch (Throwable e) { throw new AlfrescoRuntimeException("Email message processing failed", e); } }
// if the mail is sent to test-target@alfresco.com, recipient = test-target String recipient = message.getTo(); NodeRef targetNodeRef = null; if (nodeRef == null) { // Looking for an object that would have "test-target" as an email-id or email-alias targetNodeRef = getTargetNode(recipient); } else { targetNodeRef = nodeRef; } // getting Message classHandler according to the target object type EmailMessageHandler messageHandler = getMessageHandler(targetNodeRef); messageHandler.processMessage(targetNodeRef, message); return null;
private EmailMessageHandler getMessageHandler(NodeRef nodeRef) { ParameterCheck.mandatory("nodeRef", nodeRef); QName nodeTypeQName = nodeService.getType(nodeRef); String prefixedNodeTypeStr = nodeTypeQName.toPrefixString(namespaceService); EmailMessageHandler handler = emailMessageHandlerMap.get(prefixedNodeTypeStr); if (handler == null) { throw new EmailMessageException(ERR_HANDLER_NOT_FOUND, prefixedNodeTypeStr); } return handler; }
<bean id="emailService" class="my.own.custom.package.CustomEmailServiceImpl"> <property name="emailInboundEnabled"> <value>${email.inbound.enabled}</value> </property> <property name="unknownUser"> <value>${email.inbound.unknownUser}</value> </property> <property name="emailMessageHandlerMap"> <map> <entry key="cm:folder"> <ref bean="folderEmailMessageHandler"></ref> </entry> <entry key="cm:content"> <ref bean="documentEmailMessageHandler"></ref> </entry> <entry key="fm:forum"> <ref bean="forumEmailMessageHandler"></ref> </entry> <entry key="fm:discussion"> <ref bean="forumEmailMessageHandler"></ref> </entry> <entry key="fm:topic"> <ref bean="topicEmailMessageHandler"></ref> </entry> <entry key="fm:post"> <ref bean="topicEmailMessageHandler"></ref> </entry> </map> </property> <property name="namespaceService"> <ref bean="NamespaceService" /> </property> <property name="nodeService"> <ref bean="NodeService" /> </property> <property name="searchService"> <ref bean="SearchService" /> </property> <property name="retryingTransactionHelper"> <ref bean="retryingTransactionHelper" /> </property> </bean>
Now I have content type sc:myPhoto.If I need to process the default types by the existing logic and then process the sc:myPhoto with a different logic, what is that I need to do. Do I need to implement the custom for default classes too.
<entry key="sc:myPhoto"> <ref bean="myPhotoEmailMessageHandler"></ref> </entry>
<bean id="myPhotoEmailMessageHandler" parent="emailMessageHandlerBase" class="my.own.custom.package.myPhotoEmailMessageHandler" />
I believe the change of class in emailService is going to remove the class from the flow even though they are physically present in the system. In this case I may not be able to use them.The other way is copy paste the entire EmailServiceImpl and add the extra stuff which will be a redundant code on the server.