把本地文件作为附件发送

本文介绍了一种使用ABAP编程语言实现文档的创建、附件添加及通过电子邮件发送的方法。涉及的技术包括调用SO_USER_READ_API1和SO_DOCUMENT_REPOSITORY_MANAGER函数模块来处理用户数据、文档属性设置以及文件传输。

DATA method1 LIKE sy-ucomm.
DATA g_user LIKE soudnamei1.
DATA g_user_data LIKE soudatai1.
DATA g_owner LIKE soud-usrnam.
DATA g_receipients LIKE soos1 OCCURS 0 WITH HEADER LINE.
DATA g_document LIKE sood4 .
DATA g_header LIKE sood2.
DATA g_folmam LIKE sofm2.
DATA g_objcnt LIKE soli OCCURS 0 WITH HEADER LINE.
DATA g_objhead LIKE soli OCCURS 0 WITH HEADER LINE.
DATA g_objpara  LIKE selc OCCURS 0 WITH HEADER LINE.
DATA g_objparb  LIKE soop1 OCCURS 0 WITH HEADER LINE.
DATA g_attachments LIKE sood5 OCCURS 0 WITH HEADER LINE.
DATA g_references LIKE soxrl OCCURS 0 WITH HEADER LINE.

DATA g_authority LIKE sofa-usracc.
DATA g_ref_document LIKE sood4.
DATA g_new_parent LIKE soodk.
DATA: BEGIN OF g_files OCCURS 10 ,
        text(4096) TYPE c,
      END OF g_files.

DATA : fold_number(12) TYPE c,
       fold_yr(2) TYPE c,
       fold_type(3) TYPE c.

PARAMETERS ws_file(4096) TYPE c DEFAULT 'c:/AAA.txt'.

g_user-sapname = sy-uname.

CALL FUNCTION 'SO_USER_READ_API1'
  EXPORTING
    user            = g_user
  IMPORTING
    user_data       = g_user_data
  EXCEPTIONS
    user_not_exist  = 1
    parameter_error = 2
    x_error         = 3
    OTHERS          = 4.

IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

fold_type = g_user_data-outboxfol+0(3).
fold_yr = g_user_data-outboxfol+3(2).
fold_number =  g_user_data-outboxfol+5(12).
CLEAR g_files.

REFRESH : g_objcnt,
          g_objhead,
          g_objpara,
          g_objparb,
          g_receipients,
          g_attachments,
          g_references,
          g_files.

method1 = 'SAVE'.
g_document-foltp  = fold_type.
g_document-folyr   = fold_yr.
g_document-folno   = fold_number.
g_document-objtp   = g_user_data-object_typ.
*g_document-OBJYR   = '27'.
*g_document-OBJNO   = '000000002365'.
*g_document-OBJNAM = 'MESSAGE'.
g_document-objdes   = 'sap-img.com testing by program'.
g_document-folrg   = 'O'.
*g_document-okcode   = 'CHNG'.
g_document-objlen = '0'.
g_document-file_ext = 'TXT'.

g_header-objdes =  '邮件标题'.
g_header-file_ext = 'TXT'.

CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
  EXPORTING
    method       = method1
    office_user  = sy-uname
    ref_document = g_ref_document
    new_parent   = g_new_parent
  IMPORTING
    authority    = g_authority
  TABLES
    objcont      = g_objcnt
    objhead      = g_objhead
    objpara      = g_objpara
    objparb      = g_objparb
    recipients   = g_receipients
    attachments  = g_attachments
    references   = g_references
    files        = g_files
  CHANGING
    document     = g_document
    header_data  = g_header.

* File from the pc to send...
method1 = 'ATTCREATEFROMPC'.

g_files-text = ws_file.
APPEND g_files.

CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
  EXPORTING
    method       = method1
    office_user  = g_owner
    ref_document = g_ref_document
    new_parent   = g_new_parent
  IMPORTING
    authority    = g_authority
  TABLES
    objcont      = g_objcnt
    objhead      = g_objhead
    objpara      = g_objpara
    objparb      = g_objparb
    recipients   = g_receipients
    attachments  = g_attachments
    references   = g_references
    files        = g_files
  CHANGING
    document     = g_document
    header_data  = g_header.


*Send the mail..
method1 = 'SEND'.

g_receipients-recnam = 'BAITZ'.
*g_receipients-recesc = 'B'.
g_receipients-sndex = 'X'.
*g_receipients-att_fix ='X' .
APPEND  g_receipients.

*g_receipients-recnam = 'ZHENGLL'.
**g_receipients-recesc = 'B'.
*g_receipients-sndex = 'X'.
*g_receipients-att_fix ='X' .
*APPEND  g_receipients.

CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
  EXPORTING
    method       = method1
    office_user  = g_owner
    ref_document = g_ref_document
    new_parent   = g_new_parent
  IMPORTING
    authority    = g_authority
  TABLES
    objcont      = g_objcnt
    objhead      = g_objhead
    objpara      = g_objpara
    objparb      = g_objparb
    recipients   = g_receipients
    attachments  = g_attachments
    references   = g_references
    files        = g_files
  CHANGING
    document     = g_document
    header_data  = g_header.
 

<think>我们正在回答用户关于“在Jenkins中配置邮件通知时添加本地文件作为附件”的问题。根据提供的引用,我们需要参考引用[4]中提到的邮件配置部分,尤其是关于添加附件的说明。引用[4]提到:“12,Jenkins实战应用--Jenkins复杂邮件推送配置详解。...有时候构建有配置更新,可能会有非常大的日志,这个时候就要在主配置文件当中,设置附件大小的限制。...去到系统管理---》系统设置---》主配置这里,有一个附件大小的配置...”但是,用户具体需要的是如何添加本地文件作为附件。由于引用中没有直接给出步骤,我们需要结合Jenkins的一般配置方法进行说明。在Jenkins中,邮件通知通常使用“EmailExtensionPlugin”插件(比默认的邮件通知更强大)。添加附件的一般步骤如下:1.确保已经安装了“EmailExtensionPlugin”插件。2.在Jenkins的全局系统设置中配置SMTP服务器等基本信息。3.在Job的配置页面,添加构建后步骤“EditableEmailNotification”。4.在该步骤中,可以指定附件的位置。通常,我们可以使用Ant风格的路径表达式来指定要附加的文件。但是,这里需要注意:Jenkins默认的工作空间是当前Job的工作目录,所以如果你想附加一个在构建过程中生成的文件(比如在workspace目录下的某个文件),那么可以直接指定相对路径。然而,用户要求添加的是“本地文件”,这个本地文件可能有两种情况:a)该文件是构建过程中生成的,位于工作空间内。b)该文件是存在于Jenkins服务器本地文件系统上某个位置,但不在工作空间内。对于情况a,直接指定相对于工作空间的路径即可。对于情况b,则需要注意权限问题,并且通常建议将文件复制到工作空间内再附加,因为Jenkins的安全策略可能不允许直接访问工作空间之外的文件。另外,引用[4]还提到要设置附件大小的限制,这很重要,因为如果附件过大,邮件可能发送失败。因此,我们将给出以下步骤:步骤1:确保安装了EmailExtensionPlugin插件(如果未安装,则需要先安装)。步骤2:在Job的配置中,添加构建后操作“EditableEmailNotification”。步骤3:在“Attachments”区域,指定要附加的文件路径(支持Ant风格,如:**/*.log)。步骤4:如果文件位于工作空间外,需要在构建步骤中将其复制到工作空间内(例如使用copy命令或脚本)。步骤5:注意设置邮件内容和其他选项。步骤6:保存配置并测试。但是,我们也要注意引用[4]中的警告:在系统设置中设置附件大小限制(系统管理->系统设置->JenkinsLocation->ExtendedE-mailNotification->附件大小限制),默认是5MB。下面给出一个详细的配置示例:1.安装EmailExtensionPlugin:-进入Jenkins的“系统管理”->“插件管理”->在“可选插件”中搜索“EmailExtensionPlugin”,安装并重启Jenkins。2.配置全局邮件设置(系统管理->系统设置):-SMTP服务器:填写你的邮件服务器地址。-其他相关设置(如认证、端口等)按需填写。-在“ExtendedE-mailNotification”部分,设置默认的发件人、邮件后缀等。-设置附件大小限制(如果需要,可以增大,但要注意邮件服务器的限制)。3.在具体的Job中配置邮件附件:-假设我们的Job在构建过程中生成了一个报告文件`target/report.pdf`(在工作空间内的相对路径),或者我们有一个位于服务器上的文件`C:\reports\latest.pdf`。-如果我们想附加的是`target/report.pdf`,则直接在邮件附件设置中填写:`target/report.pdf`。-如果文件在`C:\reports\latest.pdf`,我们需要先将其复制到当前工作空间。可以在构建步骤中添加一个Windows批处理命令(假设Jenkins在Windows上):```batchcopy"C:\reports\latest.pdf""%WORKSPACE%"```然后,在邮件附件设置中填写:`latest.pdf`。-或者,也可以使用Ant风格的路径,例如如果文件名不确定,可以写`*.pdf`(但这样可能匹配多个,需要谨慎)。4.在Job配置页面的“构建后操作”部分,选择“EditableEmailNotification”:-填写收件人(RecipientList)。-在“Attachments”一栏中,填入文件路径(例如:`target/report.pdf`或`latest.pdf`)。-其他配置如邮件标题、内容等根据需要设置。5.保存并运行构建,检查邮件是否收到了附件。注意事项:-确保文件确实存在:在构建时,文件应该在邮件发送步骤之前生成或复制完成。-路径问题:附件路径是相对于工作空间的。如果用户使用的是Freestyleproject,上述步骤适用。如果是Pipeline,则需要使用emailext插件提供的步骤,在Pipelinescript中编写。例如:emailext(attachmentsPattern:'target/report.pdf',to:'user@example.com',subject:"Job:${currentBuild.fullDisplayName}",body:"Pleaseseetheattachedfile.")以上即为配置Jenkins邮件附件的基本步骤。根据引用的内容,我们特别参考了引用[4]关于附件大小限制的提示。因此,在配置过程中,如果遇到附件大小超过默认限制,请务必在系统设置的“ExtendedE-mailNotification”部分调整“AttachmentSizeThreshold”(单位是MB)。最后,建议用户测试邮件发送功能,确保附件正确添加且邮件发送成功。生成相关问题:1.如何安装Jenkins的EmailExtensionPlugin插件?2.Jenkins中如何配置SMTP服务器?3.在Jenkins的Pipeline脚本中如何发送附件的邮件?4.如何解决Jenkins邮件附件过大导致的发送失败问题?</think> ### Jenkins邮件通知配置:添加本地文件附件教程 在Jenkins中通过邮件通知发送本地文件作为附件,需要结合**Extended Email Plugin**插件和文件路径配置实现。以下是具体步骤: --- ### 第一步:安装必需插件 1. **安装[Email Extension Plugin](https://plugins.jenkins.io/email-ext)** ``` 系统管理 → 插件管理 → 搜索"Email Extension" → 安装并重启Jenkins ``` > 该插件支持附件功能和高级邮件配置[^1][^4] 2. **确保本地文件存在** - 文件需存储在Jenkins服务器本地路径(如`C:\reports\build_report.zip`) - 或通过构建任务生成到工作空间(如`${WORKSPACE}/output.log`) --- ### 第二步:配置邮件附件参数 1. **进入Job配置** ```bash Job → 配置 → 构建后操作 → Editable Email Notification ``` 2. **附件配置关键参数** | 参数名 | 值示例 | 说明 | |--------|---------|------| | `Attachments` | `C:\reports\*.log` | 本地绝对路径+通配符 | | 或 | `${WORKSPACE}/test_results/*.xml` | 相对工作空间路径 | | `Attachment Size Threshold` | 10 | 附件大小限制(MB)[^4] | ![附件配置示例](https://jenkins.io/images/email-attachments.png) *路径支持Ant风格表达式:`**/report/*.pdf`匹配所有子目录[^4]* --- ### 第三步:全局系统设置 1. **设置附件上限** ```bash 系统管理 → 系统设置 → Extended E-mail Notification → Attachment Size Threshold (默认5MB) ``` > 大文件需调整此值避免发送失败[^4] 2. **SMTP基础配置** ```ini SMTP server: smtp.example.com 高级: 勾选 Use SMTP Authentication 测试邮件: test@example.com ``` --- ### 疑难解答 - **⚠️ 文件路径权限问题** - Windows:确认`JENKINS_HOME/service`账户有文件读取权限 - Linux:检查`jenkins`用户的文件访问权限 - **📎 附件发送的检查点** 1. 构建日志查看`Attaching path`确认文件匹配 2. 检查`$JENKINS_HOME/emailext-*.tmp`临时目录空间 3. SMTP日志:`Manage Jenkins → System Log` --- ### 最佳实践 1. **推荐使用工作空间相对路径** ```bash # Pipeline示例 emailext attachmentsPattern: 'target/**/*.junit.xml', to: 'team@company.com' ``` 2. **大文件处理** - 分割压缩:`split -b 10m large.log` - 云存储链接:邮件中添加文件下载URL > 完整文档参考:[Email Extension Plugin Docs](https://www.jenkins.io/doc/pipeline/steps/email-ext)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值