Salesforce提供了标准的功能来实现通过Email 创建 Case。我们可以设置指定的路由的地址,指定条件的邮件会自动生成到目标salesforce系统的Case数据。Salesforce提供了两种类型的Email To Case的实现,一种是On-Demand Email-to-Case,另外一种是 Email-to-Case。On-Demand Email-to-Case可以允许你单独使用salesforce便可以将邮件转换成Case,Email-to-Case要求允许你使用Salesforce.com和你的邮件系统去实现。针对这两种类型需要有不同的实现的步骤。

 一. On-Demand Email-to-Case

使用 On-Demand Email-to-Case方式有以下的步骤去实现Email创建Case。

1.在你的邮件系统中定义Case提交的邮箱地址;

2.创建路由的地址,这个地址包括了Case定义的地址;

3.配置你的邮件系统转发Case提交到Email Services 地址,这个地址由Salesforce提供;

4. 其中 On-Demand Email-to-Case。

我们通过一个实例来配置实现这个操作。

1. 启用以下红框的内容。

2.当保存以后下面有一个关联列表Routing Addresses,选中picklist名称为Email2Case然后点击New新建一个Routing Address

3. 填写指定的内容,其中Email Address为你的源地址,这个地址的指定的邮件会生成到salesforce生成Case,如果你指定Case Owner则通过此路由生成的Case数据的Case Owner为你设置的用户,否则为系统设置的默认的case owner,选择Case Origin为Email保存即可。

4. 这个时候的Routing Address还没有生效,需要去验证邮箱地址,点击Verify按钮系统会给目标邮箱发送邮件让去verify,verify以后我们便可以使用salesforce自动生成的email service address去配置转发功能了。

去配置的账号会收到一封salesforce的邮件,点击confirm的link便可以进行授权,授权以后刚才创建的Routing Address的状态便会变成Verified。

5. 去邮件系统中配置转发功能,我demo中配置的是163的邮箱,所以登陆我的163账号以后,点击上方的设置,选择常规设置,左侧选择来信分类,然后新建一个来信分类。设置什么条件下系统邮件会转发到目标的email service address,这里设置主题包含Case的邮件便会转发,点击转发到其他邮箱按钮,填写邮箱地址为上面的email service address保存即可。

测试:发送给目标的邮件地址,主题中包括Case

Salesforce系统中便会出现一条Case信息

二. Email-to-Case

上面的方式如果能搞定肯定首选上面的方式,因为减少了定制的成本。但是有的时候标准的功能可能实现不了功能,比如当客户重复发送同样的Case内容会在系统中生成相同的Case,但是其实我们只需要使用其中一个进行追踪以及服务,上面的方式便会在系统中生成多条。又比如我们希望指定的情况要assign给不同的人或者指定的情况我们需要更新不同的Case字段,再或者我们需要发送10M+的附件,但是标准的On-Demand方式只支持10M附件,这个时候便需要使用apex进行定制化开发。

对于Apex email service domain 接收的每封电子邮件,Salesforce都会创建一个单独的InboundEmail对象,其中包含邮件的内容以及邮件的附件。当我们想要通过Email-to-Case方式实现,需要实现以下的步骤。

1. 先实现Messaging.InboundEmailHandler接口去处理一个inbound的邮件信息。

下面的demo很简单,只是针对邮件发送的内容去插入生成Case,如果有别的特殊逻辑,可以在里面自己增强。

 global class Email2CaseHandler implements Messaging.InboundEmailHandler{
global Messaging.InboundEmailResult handleInboundEmail(Messaging.inboundEmail email,Messaging.InboundEnvelope env){
Messaging.InboundEmailResult emailResult = new Messaging.InboundEmailResult();
Case case4Insert = new Case();
if(String.isNotBlank(email.subject) && email.subject.contains('Case')) {
case4Insert.subject = email.subject;
} else {
case4Insert.Subject = 'No subject from Email';
}
if(email.plainTextBody != null) {
case4Insert.Description = email.plainTextBody;
}
if(email.htmlBody != null) {
case4Insert.Description = email.htmlBody;
}
try {
insert case4Insert;
List<Messaging.InboundEmail.BinaryAttachment> binaryAttachmentList = email.binaryAttachments;
List<Attachment> attachmentList = new List<Attachment>();
for(Messaging.InboundEmail.BinaryAttachment binaryAttachment : binaryAttachmentList) {
Attachment attachment = new Attachment();
attachment.Body = binaryAttachment.body;
attachment.Name = binaryAttachment.fileName;
attachment.ParentId = case4Insert.Id;
attachmentList.add(attachment);
}
insert attachmentList;
emailResult.success = true;
} catch(Exception e) {
emailResult.success = false;
emailResult.message = e.getMessage();
} return emailResult;
}
}

2. 配置Email Services: 在setup处搜索 Email Services,新建一个Email Service,输入主要的内容然后保存。

3. 配置Email Address:输入主要的信息,保存后系统会自动生成一个Email Address.

4. 按照之前上面的步骤配置转发的地址即可。

测试:我们给配置的邮件中发送了包含了Case的subject,则会在系统中生成这条Case记录

总结:当我们要求的不高,可以使用 On-Demand方式实现可以考虑使用此种方式实现,因为这种成本比较低。如果搞定不了或者希望更加灵活的处理可以考虑Email Service的Email-to-case方式。篇中很多配置没有详细讲解,感兴趣的可以自行查看文档。篇中demo的apex class逻辑也过于简单,感兴趣的可以自己优化。本篇只是针对email to case浅入浅出。感兴趣的也可以针对第二种方式实现 email to contact, email to lead 等等。篇中有错误的地方欢迎指出,有疑问的地方欢迎留言。

salesforce零基础学习(九十三)Email To Case的简单实现的更多相关文章

  1. salesforce 零基础学习(二十二)Test简单使用

    本篇内容只是本人简单的mark开发中常出现的一些疑问,方便后期项目使用时奠定基础,如果对Test零基础童鞋,欢迎查看Test官方的使用介绍: https://help.salesforce.com/a ...

  2. salesforce 零基础学习(三十九) soql函数以及常量

    在salesforce中,我们做SOQL查询时,往往需要用到计算式,比如求和,求平均值,或者过滤数据时,往往需要通过时间日期过滤,SOQL已经封装了很多的函数,可以更加方便我们的sql查询而不需要自己 ...

  3. salesforce 零基础学习(三十六)通过Process Builder以及Apex代码实现锁定记录( Lock Record)

    上一篇内容是通过Process Builder和Approval Processes实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes的条件 ...

  4. salesforce 零基础学习(三十五) 通过Process Builder和Approval Processes锁定记录(Lock Record)

    有的时候我们可能有这样的需求,当某个字段为特定的值情况下,便锁定此条记录,仅允许Profile为System Admin的用户修改或者解锁,其他的用户只能查看此条记录,不能修改此条记录,这种情况下我们 ...

  5. salesforce 零基础学习(三十八)Translate 的使用(国际化处理)

    本篇参考:http://resources.docs.salesforce.com/200/17/en-us/sfdc/pdf/salesforce_workbench_cheatsheet.pdf ...

  6. salesforce 零基础学习(三十七) DML及Database方法简单描述

    在apex中通过soql查询可以使用两种方式,使用DML语句或者使用Database的方法. 使用DML语句和使用Database类的方法对于我们来说用的都很多,并且都很常见.对于数据库常见的操作:增 ...

  7. salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesforce

    本篇参考Trail教程: https://developer.salesforce.com/trailhead/force_com_dev_intermediate/apex_integration_ ...

  8. salesforce 零基础学习(三十)工具篇:Debug Log小工具

    开发中查看log日志是必不可少的,salesforce自带的效果显示效果不佳,大概显示效果如下所示: chrome商城提供了apex debug log良好的插件,使debug log信息更好显示.假 ...

  9. salesforce 零基础学习(三十四)动态的Custom Label

    custom label在项目中经常用到,常用在apex class或者VF里面用来显示help text或者error message.有的时候我们需要用到的信息是动态变化的,那样就需要动态来显示信 ...

  10. salesforce 零基础学习(三十二)通过Streams和DOM方式读写XML

    有的时候我们需要对XML进行读写操作,常用的XML操作主要有Streams和DOM方式. 一.Streams方式 Streams常用到的类主要有两个XmlStreamReader 以及XmlStrea ...

随机推荐

  1. 使用kbmmw中的随机数替换delphi 10.3 自带的随机数

    我们在开发中经常会使用随机数模拟各种随机条件,例如生成唯一的密码和令牌. 在计算机中,一般采用PRNG(伪随机序列发生器)模拟真实随机数.既然是随机,就要要没有任何规律, 在取值范围内均匀.独立.以确 ...

  2. XMLHttpRequest状态码及相关事件

    1.创建一个XMLHttpRequest对象 2.对XMLHttpRequest对象进行事件的监听(定义监听事件的位置不影响 3.对XMLHttpRequest对象的状态码 状态   名称 描述 0 ...

  3. 更新windows补丁时一直卡在搜索更新

    在微软下载好安装补丁Windows8.1-KB2999226-x64后,双击时一直停留在“正在此计算机上搜索”界面. 解决方案: 1.将windows 自动更新设置为:“从不检查更新”  . 2.关闭 ...

  4. apache kylin的单节点及多节点安装

    Kylin的使用安装文档Kylin简介Kylin是什么Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源社区.它提供Hadoop之上的SQL查询接口及多维分析(OLAP) ...

  5. bootstrap-table使用详解

    尴尬,标记果然到了一周之后.... 首先引入文件不必提,引入bootstrap和bootstrap-table <link rel="stylesheet" href=&qu ...

  6. windows下qt的.exe的dll文件怎么配齐

    用qt自带的windeploy工具即可 win键打开开始菜单 找到qt目录下的qt for desktop(mingw)并打开 qtcreater或者vs打开要部署的项目,构建成release模式,运 ...

  7. eclispe安装tomcate没有srver解决

    eclipse没有server选项解决方法       找到Help->InstallNew Software->"Kepler" repository(http:// ...

  8. vector作为二维数组

    vector本来就是可以用来代替一维数组的,vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小. 这里只介绍用它来代替二维的数组,二维以上的可以依此类推. ...

  9. 记录一下msf的学习使用

    刚刚用Metasploit Pro scan了一下云端服务器.RHOST直接输IP就好. 得到反馈如下: [*] [2019.04.04-14:27:35] Scan initiated: Speed ...

  10. 设置MessageBox自动关闭

    通过设置定时器,让定时器的Tick事件模拟往MessageBox发送一个Enter按钮代替用鼠标点击MessageBox上的确定按钮,来实现MessageBox的自动关闭,实现代码如下: System ...