UNPKG

@visulima/email

Version:

A comprehensive email library with multi-provider support, crypto utilities, and template engines

2 lines (1 loc) 2.98 kB
var w=Object.defineProperty;var h=(s,r)=>w(s,"name",{value:r,configurable:!0});import v from"nodemailer";import p from"./EmailError-zm2ffVav.js";import g from"./RequiredOptionError-CevW3u2K.js";import T from"./generateMessageId-11Ls5JsR.js";import $ from"./headersToRecord-BKUTr40L.js";import b from"./validateEmailOptions-BzlJECG5.js";import{defineProvider as A}from"./defineProvider-B9rSklAJ.js";var E=Object.defineProperty,i=h((s,r)=>E(s,"name",{value:r,configurable:!0}),"s");const c="nodemailer",C=A((s={})=>{if(!s.transport)throw new g(c,"transport");let r;const l=i(t=>{const m=t||s.transport;return v.createTransport(m)},"createTransporter");let d=!1;const u=i(async()=>{if(!d)try{r=l(),await r.verify(),d=!0}catch(t){throw new p(c,`Failed to initialize nodemailer transport: ${t instanceof Error?t.message:String(t)}`,{cause:t instanceof Error?t:new Error(String(t))})}},"initializeProvider"),y=i(t=>{const m=i(e=>e.name?`${e.name} <${e.email}>`:e.email,"formatFromAddress"),a=i(e=>e.name?`${e.name} <${e.email}>`:e.email,"formatToAddress"),f=s.defaultFrom||t.from,n={from:m(f),subject:t.subject,to:Array.isArray(t.to)?t.to.map(e=>a(e)):a(t.to)};return t.text&&(n.text=t.text),t.html&&(n.html=t.html),t.cc&&(n.cc=Array.isArray(t.cc)?t.cc.map(e=>a(e)):a(t.cc)),t.bcc&&(n.bcc=Array.isArray(t.bcc)?t.bcc.map(e=>a(e)):a(t.bcc)),t.replyTo&&(n.replyTo=t.replyTo.name?`${t.replyTo.name} <${t.replyTo.email}>`:t.replyTo.email),t.headers&&(n.headers=$(t.headers)),t.attachments&&t.attachments.length>0&&(n.attachments=t.attachments.map(e=>{const o={filename:e.filename};return e.raw!==void 0?o.content=e.raw:e.content!==void 0?o.content=e.content:e.path&&(o.path=e.path),e.contentType&&(o.contentType=e.contentType),e.contentDisposition&&(o.contentDisposition=e.contentDisposition),e.cid&&(o.cid=e.cid),e.encoding&&(o.encoding=e.encoding),e.headers&&(o.headers=e.headers),e.href&&(o.href=e.href),e.httpHeaders&&(o.httpHeaders=e.httpHeaders),o})),n},"convertToNodemailerOptions");return{features:{attachments:!0,customHeaders:!0,html:!0,replyTo:!0},initialize:u,isAvailable:i(async()=>{try{return r||(r=l()),await r.verify(),!0}catch{return!1}},"isAvailable"),name:c,options:s,sendEmail:i(async t=>{const m=b(t);if(m.length>0)return{error:new p(c,`Validation failed: ${m.join(", ")}`),success:!1};try{if(d||await u(),!r)throw new p(c,"Transporter not initialized. Call initialize() first.");const a=t.transportOverride?l(t.transportOverride):r,f=y(t),n=await a.sendMail(f);return{data:{messageId:n.messageId||T(),provider:c,response:n,sent:!0,timestamp:new Date},success:!0}}catch(a){return{error:new p(c,`Failed to send email: ${a instanceof Error?a.message:String(a)}`,{cause:a instanceof Error?a:new Error(String(a))}),success:!1}}},"sendEmail"),shutdown:i(async()=>{r&&typeof r.close=="function"&&r.close(),r=void 0,d=!1},"shutdown"),validateCredentials:i(async()=>{try{return r||(r=l()),await r.verify(),!0}catch{return!1}},"validateCredentials")}});export{C as default};