07-16-2009 01:10 AM
<property name="emailMessageHandlerMap">
<map>
<entry key="cm:folder">
<ref bean="folderEmailMessageHandler"></ref>
</entry>
<entry key="cm:content">
<ref bean="documentEmailMessageHandler"></ref>
</entry>
</map>
</property>
07-16-2009 05:10 AM
07-16-2009 05:19 AM
<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). But not sure how to configure or induce it into the alfresco system.
07-16-2009 05:41 AM
<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" />
07-16-2009 06:15 AM
07-16-2009 07:10 AM
/**
* 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;
}
07-16-2009 07:32 AM
07-16-2009 07:39 AM
<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>
$07-16-2009 07:51 AM
07-16-2009 08:19 AM
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.
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.