diff --git a/test/test.ts b/test/test.ts index 6cc73f3..6740476 100644 --- a/test/test.ts +++ b/test/test.ts @@ -5,12 +5,13 @@ import * as smartmail from '@pushrocks/smartmail'; const testQenv = new Qenv('./', './.nogit'); import * as mailgun from '../ts/index'; +import { IMailgunMessage } from '../ts/index'; let testMailgunAccount: mailgun.MailgunAccount; -let testSmartmail: smartmail.Smartmail; +let testSmartmail: smartmail.Smartmail; -tap.test('first test', async () => { +tap.test('should create a mailgun account', async () => { testMailgunAccount = new mailgun.MailgunAccount(testQenv.getEnvVarOnDemand('MAILGUN_API_TOKEN')); expect(testMailgunAccount).to.be.instanceOf(mailgun.MailgunAccount); }); @@ -30,9 +31,11 @@ tap.test('should send a smartmail', async () => { tap.test('should retrieve a mail using a retrieval url', async () => { const result = await testMailgunAccount.retrieveSmartMailFromMessageUrl('https://sw.api.mailgun.net/v3/domains/mail.lossless.one/messages/AgMFnnnAKC8xp_dDa79LyoxhloxtaVmnRA=='); - result.options.subject = 'hi there. This is a testmail with attachment'; - result.options.from = 'noreply@mail.lossless.com'; - testMailgunAccount.sendSmartMail(result, 'sandbox@mail.git.zone'); + if (result) { + result.options.subject = 'hi there. This is a testmail with attachment'; + result.options.from = 'noreply@mail.lossless.com'; + testMailgunAccount.sendSmartMail(result, 'sandbox@mail.git.zone'); + } }); tap.start(); diff --git a/ts/mailgun.classes.account.ts b/ts/mailgun.classes.account.ts index 33cca3b..3067da8 100644 --- a/ts/mailgun.classes.account.ts +++ b/ts/mailgun.classes.account.ts @@ -51,7 +51,7 @@ export class MailgunAccount { /** * sends a SmartMail */ - public async sendSmartMail(smartmailArg: plugins.smartmail.Smartmail, toArg: string, dataArg = {}) { + public async sendSmartMail(smartmailArg: plugins.smartmail.Smartmail, toArg: string, dataArg = {}) { const domain = smartmailArg.options.from.split('@')[1]; const formFields: plugins.smartrequest.IFormField[] = [ { @@ -98,6 +98,10 @@ export class MailgunAccount { public async retrieveSmartMailFromMessageUrl(messageUrlArg: string) { const response = await this.getRequest(messageUrlArg); + if (response.statusCode === 404) { + console.log(response.body.message); + return null; + } const responseBody: interfaces.IMailgunMessage = response.body; const smartmail = new plugins.smartmail.Smartmail({ from: responseBody.From, @@ -106,14 +110,16 @@ export class MailgunAccount { }); // lets care about attachments - for (const attachmentInfo of responseBody.attachments) { - const attachmentName = attachmentInfo.name; - const attachmentContents = await this.getRequest(attachmentInfo.url, true); - smartmail.addAttachment(new plugins.smartfile.Smartfile({ - path: `./${attachmentName}`, - base: `./${attachmentName}`, - contentBuffer: attachmentContents.body - })); + if (responseBody.attachments && responseBody.attachments instanceof Array) { + for (const attachmentInfo of responseBody.attachments) { + const attachmentName = attachmentInfo.name; + const attachmentContents = await this.getRequest(attachmentInfo.url, true); + smartmail.addAttachment(new plugins.smartfile.Smartfile({ + path: `./${attachmentName}`, + base: `./${attachmentName}`, + contentBuffer: attachmentContents.body + })); + } } return smartmail;