发送邮件增加Attachment

This commit is contained in:
wkj 2024-09-27 17:01:03 +08:00
parent 8e5d9bedbd
commit ae8f58ef47
3 changed files with 30 additions and 3 deletions

View File

@ -1,6 +1,32 @@
import { EntityDict } from '../oak-app-domain';
import { BRC } from '../types/RuntimeCxt';
interface AttachmentLike {
/** String, Buffer or a Stream contents for the attachment */
content?: string | Buffer | undefined;
/** path to a file or an URL (data uris are allowed as well) if you want to stream the file instead of including it (better for larger attachments) */
path?: string | undefined;
}
interface Attachment extends AttachmentLike {
/** filename to be reported as the name of the attached file, use of unicode is allowed. If you do not want to use a filename, set this value as false, otherwise a filename is generated automatically */
filename?: string | false | undefined;
/** optional content id for using inline images in HTML message source. Using cid sets the default contentDisposition to 'inline' and moves the attachment into a multipart/related mime node, so use it only if you actually want to use this attachment as an embedded image */
cid?: string | undefined;
/** If set and content is string, then encodes the content to a Buffer using the specified encoding. Example values: base64, hex, binary etc. Useful if you want to use binary attachments in a JSON formatted e-mail object */
encoding?: string | undefined;
/** optional content type for the attachment, if not set will be derived from the filename property */
contentType?: string | undefined;
/** optional transfer encoding for the attachment, if not set it will be derived from the contentType property. Example values: quoted-printable, base64. If it is unset then base64 encoding is used for the attachment. If it is set to false then previous default applies (base64 for most, 7bit for text). */
contentTransferEncoding?: "7bit" | "base64" | "quoted-printable" | false | undefined;
/** optional content disposition type for the attachment, defaults to attachment */
contentDisposition?: "attachment" | "inline" | undefined;
/** is an object of additional headers */
headers?: Headers | undefined;
/** an optional value that overrides entire node content in the mime message. If used then all other options set for this node are ignored. */
raw?: string | Buffer | AttachmentLike | undefined;
}
export type EmailOptions = {
host: string;
port: number;
@ -11,6 +37,7 @@ export type EmailOptions = {
to: string;
text?: string;
html?: string;
attachments?: Attachment[]
};
/**

View File

@ -1,5 +1,4 @@
import { AspectDict as CommonAspectDict } from 'oak-common-aspect';
import GeneralAspectDict from '../aspects/AspectDict';
import { BackendRuntimeContext } from '../context/BackendRuntimeContext';
import { FrontendRuntimeContext } from '../context/FrontendRuntimeContext';
import { EntityDict } from '../oak-app-domain';

View File

@ -7,7 +7,7 @@ import Email, { EmailOptions } from '../../types/Email';
export default class Nodemailer implements Email<EntityDict> {
name = 'nodemailer';
async sendEmail(options: EmailOptions, context: BRC<EntityDict>) {
const { host, port, account, password, subject, from, text, html, to } =
const { host, port, account, password, subject, from, text, html, to, attachments } =
options;
const transporter = nodemailer.createTransport({
host,
@ -42,6 +42,7 @@ export default class Nodemailer implements Email<EntityDict> {
subject,
text,
html,
attachments: attachments as nodemailer.SendMailOptions['attachments']
};
try {