Envoyer mail en utilisant TaskListener

cancel
Showing results for 
Search instead for 
Did you mean: 
inaam
Active Member

Envoyer mail en utilisant TaskListener

Bonjour, tout le monde.

Je suis debutant en alfresco. J'essaye d'envoyer un mail en utilisant une classe java qui imlpemente TaskListener

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.context.Context;
import org.alfresco.repo.action.executer.MailActionExecuter;
import org.alfresco.repo.workflow.activiti.ActivitiConstants;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class MailSender implements TaskListener {
private static final long serialVersionUID = 1L;

private static final String FROM_ADDRESS = "alfresco@localhost";
private static final String SUBJECT = "Workflow task requires action";
private static final String RECIP_PROCESS_VARIABLE = "ibenchhida@cni.tn"; 

private static Log logger = LogFactory.getLog(MailSender.class);

@Override
public void notify(DelegateTask task) {
logger.debug("Inside ExternalReviewNotification.notify()");
logger.debug("Task ID:" + task.getId());
logger.debug("Task name:" + task.getName());
logger.debug("Task proc ID:" + task.getProcessInstanceId());
logger.debug("Task def key:" + task.getTaskDefinitionKey());


StringBuffer sb = new StringBuffer();
sb.append("You have been assigned to a task named ");
sb.append(task.getName());
//sb.append(". Take the appropriate action by clicking one of the links below:\r\n\r\n");
//sb.append(getLink(task.getId(), "Approve"));
//sb.append(getLink(task.getId(), "Reject"));

logger.debug("Message body:" + sb.toString());

ActionService actionService = getServiceRegistry().getActionService();
Action mailAction = actionService.createAction(MailActionExecuter.NAME);
mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT, MailSender.SUBJECT);
mailAction.setParameterValue(MailActionExecuter.PARAM_TO, RECIP_PROCESS_VARIABLE); 
mailAction.setParameterValue(MailActionExecuter.PARAM_FROM, MailSender.FROM_ADDRESS);
mailAction.setParameterValue(MailActionExecuter.PARAM_TEXT, sb.toString());

actionService.executeAction(mailAction, null);

logger.debug("Mail action executed");

return;
}
/*
public String getLink(String taskId, String outcome) {
StringBuffer sb = new StringBuffer();
sb.append("\r\n");
sb.append("http://localhost:8181/alfresco/service/someco/bpm/review?id=activiti$");
sb.append(taskId);
sb.append("&action=");
sb.append(outcome);
sb.append("&guest=true");
sb.append("\r\n\r\n");
return sb.toString();
}*/

/* taken from ActivitiScriptBase.java */
protected ServiceRegistry getServiceRegistry() {
ProcessEngineConfigurationImpl config = Context.getProcessEngineConfiguration();
if (config != null) {
// Fetch the registry that is injected in the activiti spring-configuration
ServiceRegistry registry = (ServiceRegistry) config.getBeans().get(ActivitiConstants.SERVICE_REGISTRY_BEAN_KEY);
if (registry == null) {
throw new RuntimeException(
"Service-registry not present in ProcessEngineConfiguration beans, expected ServiceRegistry with key" +
ActivitiConstants.SERVICE_REGISTRY_BEAN_KEY);
}
return registry;
}
throw new IllegalStateException("No ProcessEngineCOnfiguration found in active context");
}
}

La configuration du alfresco-global.proporties

mail.host=zimbra.cni.tn
mail.port=25
mail.username=ibenchhida@cni.tn
mail.password=*********
mail.encoding=UTF-8
mail.from.default=ibenchhida@cni.tn
mail.smtp.auth=false
mail.smtp.timeout=30000

mon fichier  .bpmn 

<userTask id="usertask3" name="mail au fonctionnaire date prévu de livraison" activiti:assignee="${initiator.properties.userName}">
<extensionElements>
<activiti:taskListener event="create" class="tn.mincom.mail.sender.MailSender"></activiti:taskListener>
</extensionElements>
</userTask>

But i am having this Error

ERROR [action.executer.MailActionExecuter] [http-apr-8181-exec-8] Failed to send email to ibenchhida@cni.tn : org.springframework.mail.MailSendException: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: zimbra.cni.tn, 25; timeout -1;
nested exception is:
java.net.UnknownHostException: zimbra.cni.tn. Failed messages: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: zimbra.cni.tn, 25; timeout -1;
nested exception is:
java.net.UnknownHostException: zimbra.cni.tn; message exceptions (1) are:
Failed message 1: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: zimbra.cni.tn, 25; timeout -1;
nested exception is:
java.net.UnknownHostException: zimbra.cni.tn
2017-01-17 10:48:01,979 DEBUG [repo.jscript.ScriptLogger] [http-apr-8181-exec-8] org.alfresco.service.cmr.workflow.WorkflowException: 00170022 Impossible de démarrer le workflow activiti$docAdmin:1:8104.

Sachant que je suis conncte avec un proxy, veuillez bien me donner un coup de main.

4 Replies
ycoulon
Alfresco Employee

Re: Envoyer mail en utilisant TaskListener

Bonjour,

L'erreur bloquante est "UnknownHostException". Il semblerait que le nom d'hôte utilisé pour configuré ton serveur de mail ne soit pas connu par le serveur hébergeant Alfresco (problème DNS ?).

Sur le serveur hébergeant Alfresco essai de pinger ton serveur de mail si cela ne marche pas je te conseille de te rapprocher des personnes en charges du réseau dans ton organisation afin d'obtenir un nom ou une IP permettant de joindre ton serveur d'envoi de mail.

Dans le cas d'un développement local tu peux regarder à FakeSMTP ou MailCatcher qui permettront d'effectuer des tests d'envoi sans polluer internet.

Yann

inaam
Active Member

Re: Envoyer mail en utilisant TaskListener

J'ai modifie la configuration du alfresco-global.proporties

mail.host=smtp.gmail.com
mail.port=465
mail.username=inaam.chhida@gmail.com
mail.password=*******
mail.protocol=smtps
mail.smtps.starttls.enable=true
mail.smtps.auth=true
mail.smtp.debug=false
mail.from.default=inaam.chhida@gmail.com
mail.from.enabled=false

et je n'utilise plus le proxy. et ca marche

Mais je veux chercher une solution avec le proxy que dois je faire.

cleseach
Active Member II

Re: Envoyer mail en utilisant TaskListener

Bonjour,

Votre problème est de toute évidence lié à votre environnement interne : proxy, DNS, etc.

Je vous invite à relire la réponse de Yann qui vous demande de vérifier l'accessibilité de votre serveur de mail à partir du serveur Alfresco. Vous devez vérifier que le port 25 (SMTP) du serveur zimbra.cni.tn est bien accessible depuis votre serveur Alfresco.

Concernant votre proxy, pour vous aiguiller, il faudrait nous indiquer quel est sont rôle exact. Si c'est uniquement un proxy HTTP, il ne devrait pas y avoir d'impact sur les flux SMTP... sauf si, en plus, une règle de votre firewall bloque le trafic sortant autre que celui en provenance du proxy.

Cordialement,

Charles Le Seac'h

inaam
Active Member

Re: Envoyer mail en utilisant TaskListener

Merci, Charles Le Seac'h et Yann Coulon Modérateur . J'ai résolu le pbm. J'ai contacté l'équipe réseau de mon organisation.