Grundlagen zu Messaging messaging-essentials
Auf dieser Seite werden die Details zum Arbeiten mit der Messaging-Komponente beschrieben, um eine Messaging-Funktion auf einer Website einzubinden.
Grundlagen für Client-seitige Unterstützung essentials-for-client-side
Nachricht erstellen
Nachrichtenliste (für Posteingang, Gesendet und Papierkorb)
Siehe auch Clientseitige Anpassungen
Grundlagen für Server-seitige Unterstützung essentials-for-server-side
-
Messaging-Client-APIs für SCF-Komponenten
-
Messaging-APIs für den Dienst
setInboxPath()setSentItemsPath()
| code language-none |
|---|
|
Community-Site community-site
Eine Community-Site-Struktur, die mithilfe des Assistenten erstellt wird, enthält die Messaging-Funktion, falls ausgewählt. Siehe User Management Einstellungen von Community-Sites-Konsole.
Beispielcode: Benachrichtigung erhalten sample-code-message-received-notification
Die Funktion Social Messaging löst Ereignisse für Vorgänge aus, z. B. send, marking read, marking delete. Diese Ereignisse können erfasst und Aktionen für die im Ereignis enthaltenen Daten durchgeführt werden.
Das folgende Beispiel zeigt einen Ereignis-Handler, der auf die message sent -Ereignis ein und sendet eine E-Mail an alle Empfänger, die die Day CQ Mail Service.
Zum Testen des serverseitigen Beispielskripts benötigen Sie eine Entwicklungsumgebung und die Möglichkeit, ein OSGi-Bundle zu erstellen.
-
Melden Sie sich als Administrator bei
[CRXDE|Lite](http://localhost:4502/crx/de) -
Erstellen Sie eine
bundle nodein/apps/engage/installmit beliebigen Namen, wie- Symbolischer Name: com.engage.media.social.messaging.MessagingNotification
- Name: Erste Schritte - Tutorial-Nachrichten-Benachrichtigung
- Beschreibung: einen Beispieldienst zum Senden einer E-Mail-Benachrichtigung an Benutzer beim Empfang einer Nachricht
- Paket:
com.engage.media.social.messaging.notification
-
Navigieren Sie zu
/apps/engage/install/com.engage.media.social.messaging.MessagingNotification/src/main/java/com/engage/media/social/messaging/notification- Löschen Sie die
Activator.javaautomatisch erstellte Klasse - Klasse erstellen
MessageEventHandler.java - Kopieren/fügen Sie den unten stehenden Code in
MessageEventHandler.java
- Löschen Sie die
-
Klicken Sie auf Alle speichern
-
Navigieren Sie zu
/apps/engage/install/com.engage.media.social.messaging.MessagingNotification/com.engage.media.social.messaging.MessagingNotification.bndund fügen Sie alle Importanweisungen hinzu, wie in derMessageEventHandler.javaCode. -
Bundle erstellen
-
Sichern
Day CQ Mail ServiceOSGi-Dienst ist konfiguriert -
Melden Sie sich als ein Demobenutzer an und senden Sie eine E-Mail an einen anderen
-
Der Empfänger sollte eine E-Mail bezüglich einer neuen Nachricht erhalten
MessageEventHandler.java messageeventhandler-java
package com.engage.media.social.messaging.notification;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.Reference;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.Resource;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
import org.apache.commons.mail.HtmlEmail;
import java.util.List;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.cq.social.messaging.api.Message;
import com.adobe.cq.social.messaging.api.MessagingEvent;
import com.day.cq.mailer.MessageGatewayService;
import com.day.cq.mailer.MessageGateway;
@Component(immediate=true)
@Service(EventHandler.class)
@Properties({
@Property(name = "event.topics", value = "com/adobe/cq/social/message")
})
public class MessagingEventHandler implements EventHandler {
private Logger logger = LoggerFactory.getLogger(MessagingEventHandler.class);
@Reference
ResourceResolverFactory resourceResolverFactory;
@Reference
private MessageGatewayService messageGatewayService;
ResourceResolver resourceResolver=null;
MessageGateway messageGateway=null;
public void sendMail(String from, String to,String subject, String content){
Email email = new SimpleEmail();
messageGateway = messageGatewayService.getGateway(SimpleEmail.class);
try {
email.addTo(to);
email.addReplyTo(from);
email.setFrom(from);
email.setMsg(content);
email.setSubject(subject);
messageGateway.send(email);
} catch(EmailException ex) {
logger.error("MessageNotificaiton : Error sending email : "+ex.getMessage());
}
logger.info("**** MessageNotification **** Mail sent to " + to);
}
public void handleEvent(Event event) {
//Get Message Path and originator User's ID from event
String messagePath = (String) event.getProperty("path");
String senderId = (String) event.getProperty("userId");
MessagingEvent.MessagingActions action = (MessagingEvent.MessagingActions) event.getProperty("action");
try{
if(MessagingEvent.MessagingActions.MessageSent.equals(action)){
resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
//Read message
Resource resource = resourceResolver.getResource(messagePath);
Message msg = resource.adaptTo(Message.class);
//Get list of recipient Ids from message
//For Getting Started Tutorial, Id is same as email. If that is not the case in your site,
//an additional step is needed to retrieve the email for the Id
List<String> reclist = msg.getRecipientIdList();
for(int i=0;i<reclist.size();i++){
//Send Email using Mailing Service
sendMail("admin@cqadmin.qqq",reclist.get(i),"New message on Getting Started Tutorial", "Hi\nYou have received a new message from " + senderId + ". To read it, sign in to Getting Started Tutorial.\n\n-Engage Admin");
}
}
} catch(Exception ex){
logger.error("Error getting message info : " + ex.getMessage());
} finally {
resourceResolver.close();
}
}
}