JavaScript Client Library
Our JavaScript client library provides a simple interface for sending emails through Shoutbox.net.
Installation
npm install shoutboxnet
# or
yarn add shoutboxnet
# or
pnpm add shoutboxnet
Using the Client Library
Basic Usage
import Shoutbox from 'shoutboxnet';
const client = new Shoutbox(process.env.SHOUTBOX_API_KEY);
const emailOptions = {
from: '[email protected]',
to: '[email protected]',
subject: 'Hello from JavaScript!',
html: '<h1>Hello!</h1><p>This is a test email.</p>'
};
try {
await client.sendEmail(emailOptions);
console.log('Email sent successfully');
} catch (error) {
console.error('Failed to send email:', error);
}
With Multiple Recipients
import Shoutbox from 'shoutboxnet';
const client = new Shoutbox(process.env.SHOUTBOX_API_KEY);
const emailOptions = {
from: '[email protected]',
to: ['[email protected]', '[email protected]'],
subject: 'Group Announcement',
html: '<h1>Hello Team!</h1><p>This is a group announcement.</p>'
};
await client.sendEmail(emailOptions);
With Attachments
import Shoutbox from 'shoutboxnet';
import { readFileSync } from 'fs';
const client = new Shoutbox(process.env.SHOUTBOX_API_KEY);
const attachment = {
filepath: './document.pdf',
filename: 'report.pdf',
contentType: 'application/pdf'
};
const emailOptions = {
from: '[email protected]',
to: '[email protected]',
subject: 'Report Attached',
html: '<h1>Monthly Report</h1><p>Please find the report attached.</p>',
attachments: [attachment]
};
await client.sendEmail(emailOptions);
import Shoutbox from 'shoutboxnet';
const client = new Shoutbox(process.env.SHOUTBOX_API_KEY);
const emailOptions = {
from: '[email protected]',
to: '[email protected]',
subject: 'Custom Headers Example',
html: '<h1>Hello!</h1>',
headers: {
'X-Custom-Header': 'custom-value',
'X-Campaign-ID': 'campaign-123'
}
};
await client.sendEmail(emailOptions);
With CC Recipients
import Shoutbox from 'shoutboxnet';
const client = new Shoutbox(process.env.SHOUTBOX_API_KEY);
const emailOptions = {
from: '[email protected]',
to: '[email protected]',
cc: ['[email protected]', '[email protected]'],
subject: 'CC Example',
html: '<h1>Hello!</h1><p>This email has CC recipients.</p>'
};
await client.sendEmail(emailOptions);
Sending Multiple Emails
import Shoutbox from 'shoutboxnet';
const client = new Shoutbox(process.env.SHOUTBOX_API_KEY);
const emails = [
{
from: '[email protected]',
to: '[email protected]',
subject: 'Email 1',
html: '<h1>First Email</h1>'
},
{
from: '[email protected]',
to: '[email protected]',
subject: 'Email 2',
html: '<h1>Second Email</h1>'
}
];
await client.sendEmails(emails);
With React Email Templates
import Shoutbox from 'shoutboxnet';
import { WelcomeTemplate } from './emails/WelcomeTemplate';
const client = new Shoutbox(process.env.SHOUTBOX_API_KEY);
const emailOptions = {
from: '[email protected]',
to: '[email protected]',
subject: 'Welcome!',
react: <WelcomeTemplate name="John" />
};
await client.sendEmail(emailOptions);
Error Handling
import Shoutbox from 'shoutboxnet';
const client = new Shoutbox(process.env.SHOUTBOX_API_KEY);
async function sendEmailWithRetry(options, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
await client.sendEmail(options);
return;
} catch (error) {
if (attempt === maxRetries) {
throw error;
}
console.log(`Attempt ${attempt} failed, retrying...`);
await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
}
}
}
// Usage
try {
await sendEmailWithRetry({
from: '[email protected]',
to: '[email protected]',
subject: 'Test with Retry',
html: '<h1>Hello!</h1>'
});
} catch (error) {
console.error('All retry attempts failed:', error);
}
Request Structure
Email Options
The email options object can include:
from
(required): Sender email address
to
(required): Recipient email address(es)
subject
(required): Email subject line
html
(optional): HTML content of the email
text
(optional): Plain text content
react
(optional): React Email component
name
(optional): Sender name
replyTo
(optional): Reply-to email address
attachments
(optional): Array of attachment objects
headers
(optional): Custom email headers
cc
(optional): CC recipients
Attachment Structure
Attachment objects can include:
filename
: Name of the file
filepath
: Path to the file
contentType
: MIME type of the file
content
: Base64 encoded content or Buffer
Environment Variables
// .env
SHOUTBOX_API_KEY=your-api-key-here
// Usage
import { config } from 'dotenv';
import Shoutbox from 'shoutboxnet';
config();
const apiKey = process.env.SHOUTBOX_API_KEY;
if (!apiKey) {
throw new Error('SHOUTBOX_API_KEY is required');
}
const client = new Shoutbox(apiKey);
Browser Usage
When using in the browser, it’s recommended to use a server-side proxy:
// frontend.js
const client = {
async sendEmail(options) {
const response = await fetch('/api/send-email', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(options)
});
if (!response.ok) {
throw new Error('Failed to send email');
}
return response.json();
}
};
// Usage
await client.sendEmail({
from: '[email protected]',
to: '[email protected]',
subject: 'Hello!',
html: '<h1>Hello from the browser!</h1>'
});
Rate Limits
Please contact support for information about rate limits for your API key.
Next Steps
Support
For additional support or questions, please contact our support team.