>

SAP中发送邮件,Java中发送邮件

- 编辑:澳门新葡亰平台游戏 -

SAP中发送邮件,Java中发送邮件

问题:如何发送Excel中图表到邮件?

图片 1图片 2

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

回答:

 1 DATA: objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE,
 2       docdata LIKE sodocchgi1,
 3       objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
 4       objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,
 5       reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE,
 6       objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.
 7 
 8 DATA: tab_lines TYPE i.
 9 
10 *----------------------------------------------------------------------*
11 
12 START-OF-SELECTION.
13   docdata-obj_descr = '发到邮件自动OBJ_DESCR'.
14   docdata-obj_name = 'OBJ_NAME'.
15   docdata-obj_langu = sy-langu.
16 
17   objtxt = '标题OBJTXT.'.
18   APPEND objtxt.
19 
20   objtxt = docdata-obj_descr.
21   APPEND objtxt.
22 
23   objtxt = '测试.'.
24   APPEND objtxt.
25 
26 * Write Packing List (Main)
27 * 3 has been fixed because OBJTXT has fix three lines
28   READ TABLE objtxt INDEX 3.
29 
30   docdata-doc_size = ( 3 - 1 ) * 255 + strlen( objtxt ).
31   CLEAR objpack-transf_bin.
32   objpack-head_start = 1.
33   objpack-head_num = 0.
34   objpack-body_start = 1.
35   objpack-body_num = 3.
36   objpack-doc_type = 'RAW'.
37   APPEND objpack.
38 
39   reclist-receiver = '***'."如果是发到工作台就填登陆用户名,如果是发到email就添email地址
40   reclist-receiver = 'tfhzy'.
41   TRANSLATE reclist-receiver TO UPPER CASE.
42   reclist-rec_type = 'B'."发到工作台
43 *RECLIST-REC_TYPE = 'U'."发到外部信箱
44   APPEND reclist.
45 
46   CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
47     EXPORTING
48       document_data                    = docdata
49 *   PUT_IN_OUTBOX                    = ' '
50       commit_work                      = 'X'
51 * IMPORTING
52 *   SENT_TO_ALL                      =
53 *   NEW_OBJECT_ID                    =
54     TABLES
55       packing_list                     = objpack
56 *    OBJECT_HEADER                    = OBJHEAD
57 *   CONTENTS_BIN                     =
58       contents_txt                     = objtxt
59 *   CONTENTS_HEX                     =
60 *   OBJECT_PARA                      =
61 *   OBJECT_PARB                      =
62       receivers                        = reclist
63    EXCEPTIONS
64      too_many_receivers               = 1
65      document_not_sent                = 2
66      document_type_not_exist          = 3
67      operation_no_authorization       = 4
68      parameter_error                  = 5
69      x_error                          = 6
70      enqueue_error                    = 7
71      OTHERS                           = 8
72             .
73   IF sy-subrc <> 0.
74 * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
75 *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
76   ENDIF.

1. 电子邮件协议

1、表格文件作为邮件附件发送;

View Code

电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

2、表格转为PDF,再作为邮件附件发送;

不知为何,一直返回异常报错,sy-subrc = 6,猜测是权限的问题。

2. JavaMail

3、图表截图,写入邮件正文,再发送;

我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去官方下载,这里我从 JavaEE 官方的 Github 仓库下载。

更多Excel职场办公方面的问题,敬请点我头像关注公号订阅

JavaMail 下载地址:https://github.com/javaee/javamail/releases

回答:

特别注意:

方法太多了:

本测试用例用的 JavaMail 版本是 1.6.0,如果下载到其他版本的 JavaMail 运行时出现问题,请使用JavaMail 1.6.0版本再进行尝试。

1、表格不保密的话,直接把Excel作为邮件附件发送;

使用JavaMail 1.6.0要求的 JDK 版本必须是JDK 1.7 以上(建议使用最新版 JDK)。

2、对方只想看图表的话,把Excel表里面需要的图表复制到Word里面,发送;

不要直接就完完全全复制我的代码,需要修改一下发送的标题、内容、用户昵称,要不然所有人都直接复制我的代码发送,内容一致,邮箱服务器就可能会检测到这些内容是垃圾广告内容,不让你发送,会返回错误码,查询错误码也能查询到失败原因。

3、还有就是直接用网页、QQ等截图工具截图复制,然后再邮件里面粘贴,发送。

package com.companyserver.service.impl;

@Service

public class EmailServiceImpl implements EmailService {

@Value("${mail.username}")

private StringMAIL_USERNAME;

@Value("${mail.from}")

private StringMAIL_FROM;

@Value("${mail.password}")

private StringMAIL_PASSWORD;

@Value("${mail.host}")

private StringMAIL_HOST;

@Value("${mail.port}")

private StringMAIL_PORT;

//设置配置条件

private Properties generateProperties() {

     Properties properties = System.getProperties();//系统配置

      properties.put("mail.smtp.host",MAIL_HOST);//邮件服务器

       properties.put("mail.smtp.port",MAIL_PORT);//邮件服务器端口

       properties.put("mail.smtp.auth","true");

        properties.put("mail.transport.protocol","smtp");//发送方式

         return properties;

   }

private Session getSession() {

Properties props =this.generateProperties();

Session session = Session.getInstance(props, new javax.mail.Authenticator() {

      protected PasswordAuthentication getPasswordAuthentication() {

              return new PasswordAuthentication(MAIL_USERNAME, MAIL_PASSWORD);

          }

     });

     return session;

   }

//发送网页消息

@Override

public voidsendHtml(String to,String subject,String body)throwsMessagingException {

Session session = getSession();

Message message =newMimeMessage(session);

message.setFrom(newInternetAddress(MAIL_FROM));

message.setRecipient(Message.RecipientType.TO, newInternetAddress(to));

message.setSentDate(newDate());//设置邮件消息发送的时间

message.setSubject(subject);//设置邮件发送的端口


//发送简单的文本消息可以这样

//message.setText(body);

//Transport.send(message);


//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象

Multipart mainPart =newMimeMultipart();

MimeBodyPart messageBodyPart =newMimeBodyPart();//创建一个包含附件内容的MimeBodyPart

//设置HTML内容

messageBodyPart.setContent(body,"text/html; charset=utf-8");

mainPart.addBodyPart(messageBodyPart);

message.setContent(mainPart);

Transport.send(message);

    }

@Override

public voidsendMessage(String to,String subject,String body)throwsMessagingException{

Session session = getSession();

Message message =newMimeMessage(session);

message.setFrom(newInternetAddress(MAIL_FROM));

message.setRecipient(Message.RecipientType.TO, newInternetAddress(to));

message.setSentDate(newDate());//设置邮件消息发送的时间

message.setSubject(subject);

message.setText(body);

Transport.send(message);

     }

}

回答:

选中你需要的表格,复制,鼠标选中一个空白单元格,点击左上角粘贴后面的倒三角,下拉列表中选择粘贴为图片,表就复制为图片了,可以直接放到邮箱正文里发送。

回答:

你也可以直接使用Excel表自带的照相机功能,保存成图片发送

本文由办公软件发布,转载请注明来源:SAP中发送邮件,Java中发送邮件