Test Newsletter Signups

Verify your newsletter signup flow from form submission to inbox delivery. Test double opt-in, welcome emails, and unsubscribe functionality.

Newsletter flows have many failure points

  • Double opt-in confirmation links may not work
  • Welcome emails may fail to send or render incorrectly
  • Unsubscribe links might be broken or missing
  • Hard to test across different email scenarios

End-to-end newsletter testing

  • Test the complete signup → confirm → welcome flow
  • Verify confirmation links work and redirect correctly
  • Check that unsubscribe links are present and functional
  • Test with unique emails to avoid list pollution

Example

Testing Newsletter Double Opt-intypescript
import { test, expect } from '@playwright/test';

test('newsletter double opt-in flow', async ({ page, request }) => {
  const testEmail = `newsletter+${Date.now()}@in.plop.email`;

  // Submit newsletter signup form
  await page.goto('/');
  await page.fill('[name="newsletter-email"]', testEmail);
  await page.click('button:has-text("Subscribe")');
  await expect(page.locator('text=Check your email')).toBeVisible();

  // Fetch confirmation email
  const confirmEmail = await request.get(
    'https://api.plop.email/v1/messages/latest',
    {
      params: { to: testEmail },
      headers: { Authorization: `Bearer ${process.env.PLOP_API_KEY}` },
    }
  );
  const { htmlContent, subject } = await confirmEmail.json();

  expect(subject).toContain('Confirm');

  // Extract and visit confirmation link
  const confirmLink = htmlContent.match(/href="([^"]*confirm[^"]*)"/)?.[1];
  expect(confirmLink).toBeTruthy();
  await page.goto(confirmLink);
  await expect(page.locator('text=Subscription confirmed')).toBeVisible();

  // Verify welcome email arrives
  await page.waitForTimeout(2000);
  const welcomeEmail = await request.get(
    'https://api.plop.email/v1/messages/latest',
    {
      params: { to: testEmail },
      headers: { Authorization: `Bearer ${process.env.PLOP_API_KEY}` },
    }
  );
  const welcome = await welcomeEmail.json();
  expect(welcome.subject).toContain('Welcome');

  // Verify unsubscribe link exists
  expect(welcome.htmlContent).toMatch(/unsubscribe/i);
});

Benefits

Complete Flow Testing

Test signup → confirmation → welcome → unsubscribe.

Link Validation

Verify all links work and redirect to the correct pages.

Compliance Checking

Ensure unsubscribe links are present (CAN-SPAM, GDPR).

Clean Test Data

Unique test emails don't pollute your subscriber list.

Related Integrations

Ready to test newsletter testing?

Get started with plop.email in minutes. No credit card required.