← back to Animate Museum Posts

src/sendEmail.js

55 lines

import nodemailer from 'nodemailer';
import dotenv from 'dotenv';

dotenv.config();

export async function sendPostNotification(tweetText, metadata, mediaPath) {
  try {
    if (!process.env.EMAIL_HOST || !process.env.EMAIL_USER || !process.env.EMAIL_PASS) {
      console.log('Email credentials not configured, skipping email notification');
      return;
    }

    const transporter = nodemailer.createTransport({
      host: process.env.EMAIL_HOST,
      port: process.env.EMAIL_PORT || 587,
      secure: process.env.EMAIL_SECURE === 'true',
      auth: {
        user: process.env.EMAIL_USER,
        pass: process.env.EMAIL_PASS,
      },
    });

    const mailOptions = {
      from: process.env.EMAIL_FROM || process.env.EMAIL_USER,
      to: 'steve@designerwallcoverings.com',
      subject: `Posted: ${metadata.title}`,
      text: tweetText,
      html: `
        <div style="font-family: Arial, sans-serif; max-width: 600px;">
          <h2>New Post Published</h2>
          <p><strong>Tweet:</strong></p>
          <pre style="background: #f5f5f5; padding: 15px; border-radius: 5px;">${tweetText}</pre>
          <hr>
          <p><strong>Artwork Details:</strong></p>
          <ul>
            <li><strong>Title:</strong> ${metadata.title}</li>
            <li><strong>Artist:</strong> ${metadata.artist}</li>
            <li><strong>Year:</strong> ${metadata.year}</li>
            <li><strong>Credit:</strong> ${metadata.creditLine}</li>
          </ul>
        </div>
      `,
      attachments: mediaPath ? [{
        filename: mediaPath.split('/').pop(),
        path: mediaPath
      }] : []
    };

    await transporter.sendMail(mailOptions);
    console.log('Email notification sent to steve@designerwallcoverings.com');

  } catch (error) {
    console.error('Error sending email:', error.message);
  }
}