2020-03-01 05:01:03 +07:00
const nodemailer = require ( "nodemailer" )
const core = require ( "@actions/core" )
2021-06-23 00:18:21 +07:00
const glob = require ( "@actions/glob" )
2020-03-01 05:01:03 +07:00
const fs = require ( "fs" )
2021-04-25 21:14:13 +07:00
const showdown = require ( "showdown" )
2020-03-01 05:01:03 +07:00
2020-12-01 00:51:34 +07:00
function getBody ( bodyOrFile , convertMarkdown ) {
let body = bodyOrFile
// Read body from file
if ( bodyOrFile . startsWith ( "file://" ) ) {
const file = bodyOrFile . replace ( "file://" , "" )
body = fs . readFileSync ( file , "utf8" )
}
// Convert Markdown to HTML
if ( convertMarkdown ) {
const converter = new showdown . Converter ( )
body = converter . makeHtml ( body )
2020-03-01 05:01:03 +07:00
}
return body
}
2020-09-24 15:24:29 +07:00
function getFrom ( from , username ) {
2021-04-25 21:14:13 +07:00
if ( from . match ( /.+ <.+@.+>/ ) ) {
2020-03-25 22:18:35 +07:00
return from
}
return ` " ${ from } " < ${ username } > `
}
2021-06-23 00:18:21 +07:00
async function getAttachments ( attachments ) {
const globber = await glob . create ( attachments . split ( ',' ) . join ( '\n' ) )
const files = await globber . glob ( )
return files . map ( f => ( { path : f } ) )
}
2020-03-01 05:01:03 +07:00
async function main ( ) {
2020-03-01 05:13:30 +07:00
try {
2020-12-01 00:51:34 +07:00
const serverAddress = core . getInput ( "server_address" , { required : true } )
const serverPort = core . getInput ( "server_port" , { required : true } )
2021-06-15 01:04:27 +07:00
const username = core . getInput ( "username" )
const password = core . getInput ( "password" )
2020-03-01 18:37:11 +07:00
const subject = core . getInput ( "subject" , { required : true } )
const from = core . getInput ( "from" , { required : true } )
2020-12-16 23:16:24 +07:00
const to = core . getInput ( "to" , { required : true } )
2021-05-03 23:02:47 +07:00
const secure = core . getInput ( "secure" , { required : false } )
2021-04-25 21:11:54 +07:00
const body = core . getInput ( "body" , { required : false } )
const htmlBody = core . getInput ( "html_body" , { required : false } )
2020-12-16 23:16:24 +07:00
const cc = core . getInput ( "cc" , { required : false } )
const bcc = core . getInput ( "bcc" , { required : false } )
2021-04-08 00:34:58 +07:00
const replyTo = core . getInput ( "reply_to" , { required : false } )
2020-04-07 15:30:45 +07:00
const attachments = core . getInput ( "attachments" , { required : false } )
2020-12-01 00:51:34 +07:00
const convertMarkdown = core . getInput ( "convert_markdown" , { required : false } )
2021-03-26 14:42:12 +07:00
const ignoreCert = core . getInput ( "ignore_cert" , { required : false } )
2021-07-02 23:33:56 +07:00
const priority = core . getInput ( "priority" , { required : false } )
2020-03-01 05:01:03 +07:00
2021-06-15 01:04:27 +07:00
if ( ! username || ! password ) {
core . warning ( "Username and password not specified. You should only do this if you are using a self-hosted runner to access an on-premise mail server." )
}
2020-03-24 20:03:35 +07:00
const transport = nodemailer . createTransport ( {
2020-12-01 00:51:34 +07:00
host : serverAddress ,
2021-06-15 01:04:27 +07:00
auth : username && password ? {
2020-03-24 20:03:35 +07:00
user : username ,
2021-06-15 01:04:27 +07:00
pass : password
} : undefined ,
port : serverPort ,
secure : secure == "true" ? true : serverPort == "465" ,
tls : ignoreCert == "true" ? {
2021-03-26 14:42:12 +07:00
rejectUnauthorized : false
2021-06-15 01:04:27 +07:00
} : undefined ,
2020-03-24 20:03:35 +07:00
} )
2021-04-25 21:14:13 +07:00
2020-03-01 18:37:11 +07:00
const info = await transport . sendMail ( {
2020-09-24 15:24:29 +07:00
from : getFrom ( from , username ) ,
2020-03-01 05:13:30 +07:00
to : to ,
2021-04-25 21:11:54 +07:00
subject : subject ,
2020-12-16 23:16:24 +07:00
cc : cc ? cc : undefined ,
bcc : bcc ? bcc : undefined ,
2021-04-08 00:34:58 +07:00
replyTo : replyTo ? replyTo : undefined ,
2021-04-25 21:19:34 +07:00
text : body ? getBody ( body , false ) : undefined ,
2021-04-25 21:11:54 +07:00
html : htmlBody ? getBody ( htmlBody , convertMarkdown ) : undefined ,
2021-07-02 23:33:56 +07:00
priority : priority ? priority : undefined ,
2021-06-23 00:18:21 +07:00
attachments : attachments ? getAttachments ( attachments ) : undefined ,
2020-03-01 05:13:30 +07:00
} )
} catch ( error ) {
core . setFailed ( error . message )
}
2020-03-01 05:01:03 +07:00
}
2020-03-25 22:06:11 +07:00
main ( )