您正在檢視適用於以下版本的說明內容::

This page documents the details of working with using the Messaging component to include a messaging feature on a website.

Essentials for Client-Side

Compose Message
 resourceType

social/messaging/components/hbs/composemessage

 clientllibs

cq.social.hbs.messaging

 templates /libs/social/messaging/components/hbs/composemessage/composemessage.hbs
css /libs/social/messaging/components/hbs/composemessage/clientlibs/composemessage.css
properties see Confiiguring Messaging
admin configuration Configuring Messaging

 

Message List
(for Inbox, Sent, and Trash)
 resourceType

social/messaging/components/hbs/messagebox

 clientllibs

cq.social.hbs.messaging

 templates /libs/social/messaging/components/hbs/messagebox/messagebox.hbs
css /libs/social/messaging/components/hbs/messagebox/clientlibs/messagebox.css
properties see Confiiguring Messaging
admin configuration Configuring Messaging

Essentials for Server-Side

注意:

The String parameter must not contain a trailing slash "/" for the following MessageBuilder methods :

  • setInboxPath()
  • setSentItemsPath()

For example :

    valid : mb.setInboxPath( "/mail/inbox" );
not valid : mb.setInboxPath( "/mail/inbox/" );

Community Site

A community site structure, created using the wizard, will include the messaging feature when selected.  See User Management settings of Community Sites Console.

Sample Code : Message Received Notification

The Social Messaging feature throw events for operations, for example send, marking read, marking delete.  These events can be caught and actions taken on the data contained in the event.

The following example is of an event handler which listens for the message sent event and sends an email to all message recipients using the Day CQ Mail Service.

To try the server-side sample script, you will need a development environment and the ability to build an OSGi bundle.

  1. login as an administrator to CRXDE|Lite
  2. create a bundle node in /apps/engage/install with arbitrary names, such as
    • Symbolic Name : com.engage.media.social.messaging.MessagingNotification
    • Name : Getting Started Tutorial Message Notificaton
    • Description : a sample service for sending an email notification to users when they receive a message
    • Package : com.engage.media.social.messaging.notification
  3. navigate to /apps/engage/install/com.engage.media.social.messaging.MessagingNotification/src/main/java/com/engage/media/social/messaging/notification
    1. delete the Activator.java class automatically created
    2. create class MessageEventHandler.java
    3. copy/paste the code below into MessageEventHandler.java
  4. click Save All
  5. navigate to /apps/engage/install/com.engage.media.social.messaging.MessagingNotification/com.engage.media.social.messaging.MessagingNotification.bnd and add all the import statements as written in the MessageEventHandler.java code.
  6. build the bundle
  7. ensure Day CQ Mail Service OSGi service is configured
  8. login as one demo user and send email to another
  9. the recipient should receive an email regarding a new message

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();
        }

    }
}

此産品由 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 授權  Creative Commons 條款未涵蓋 Twitter™ 與 Facebook 文章。

法律說明   |   線上隱私權政策