Skip to content

fix: server crash when send email failed #606

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 19, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 27 additions & 23 deletions service/src/utils/mail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export async function sendVerifyMail(toMail: string, verifyUrl: string) {
let mailHtml = fs.readFileSync(mailTemplatePath, 'utf8')
mailHtml = mailHtml.replace(/\${VERIFY_URL}/g, verifyUrl)
mailHtml = mailHtml.replace(/\${SITE_TITLE}/g, config.siteConfig.siteTitle)
sendMail(toMail, `${config.siteConfig.siteTitle} 账号验证`, mailHtml, config.mailConfig)
await sendMail(toMail, `${config.siteConfig.siteTitle} 账号验证`, mailHtml, config.mailConfig)
}

export async function sendVerifyMailAdmin(toMail: string, verifyName: string, verifyUrl: string) {
Expand All @@ -29,7 +29,7 @@ export async function sendVerifyMailAdmin(toMail: string, verifyName: string, ve
mailHtml = mailHtml.replace(/\${TO_MAIL}/g, verifyName)
mailHtml = mailHtml.replace(/\${VERIFY_URL}/g, verifyUrl)
mailHtml = mailHtml.replace(/\${SITE_TITLE}/g, config.siteConfig.siteTitle)
sendMail(toMail, `${config.siteConfig.siteTitle} 账号申请`, mailHtml, config.mailConfig)
await sendMail(toMail, `${config.siteConfig.siteTitle} 账号申请`, mailHtml, config.mailConfig)
}

export async function sendResetPasswordMail(toMail: string, verifyUrl: string) {
Expand All @@ -39,7 +39,7 @@ export async function sendResetPasswordMail(toMail: string, verifyUrl: string) {
let mailHtml = fs.readFileSync(mailTemplatePath, 'utf8')
mailHtml = mailHtml.replace(/\${VERIFY_URL}/g, verifyUrl)
mailHtml = mailHtml.replace(/\${SITE_TITLE}/g, config.siteConfig.siteTitle)
sendMail(toMail, `${config.siteConfig.siteTitle} 密码重置`, mailHtml, config.mailConfig)
await sendMail(toMail, `${config.siteConfig.siteTitle} 密码重置`, mailHtml, config.mailConfig)
}

export async function sendNoticeMail(toMail: string) {
Expand All @@ -50,30 +50,34 @@ export async function sendNoticeMail(toMail: string) {
let mailHtml = fs.readFileSync(mailTemplatePath, 'utf8')
mailHtml = mailHtml.replace(/\${SITE_DOMAIN}/g, config.siteConfig.siteDomain)
mailHtml = mailHtml.replace(/\${SITE_TITLE}/g, config.siteConfig.siteTitle)
sendMail(toMail, `${config.siteConfig.siteTitle} 账号开通`, mailHtml, config.mailConfig)
await sendMail(toMail, `${config.siteConfig.siteTitle} 账号开通`, mailHtml, config.mailConfig)
}

export async function sendTestMail(toMail: string, config: MailConfig) {
return sendMail(toMail, '测试邮件|Test mail', '这是一封测试邮件|This is test mail', config)
await sendMail(toMail, '测试邮件|Test mail', '这是一封测试邮件|This is test mail', config)
}

async function sendMail(toMail: string, subject: string, html: string, config: MailConfig) {
const mailOptions = {
from: config.smtpFrom || config.smtpUserName,
to: toMail,
subject,
html,
}
async function sendMail(toMail: string, subject: string, html: string, config: MailConfig): Promise<void> {
try {
const mailOptions = {
from: config.smtpFrom || config.smtpUserName,
to: toMail,
subject,
html,
}

const transporter = nodemailer.createTransport({
host: config.smtpHost,
port: config.smtpPort,
secure: config.smtpTsl,
auth: {
user: config.smtpUserName,
pass: config.smtpPassword,
},
})
const info = await transporter.sendMail(mailOptions)
return info.messageId
const transporter = nodemailer.createTransport({
host: config.smtpHost,
port: config.smtpPort,
secure: config.smtpTsl,
auth: {
user: config.smtpUserName,
pass: config.smtpPassword,
},
})
await transporter.sendMail(mailOptions)
}
catch (e) {
globalThis.console.error('Error send email, ', e)
}
}