Skip to content

chore(deps): bump nodemailer from 7.0.11 to 8.0.5 in the npm_and_yarn group across 1 directory#2876

Open
dependabot[bot] wants to merge 2 commits intomainfrom
dependabot/npm_and_yarn/npm_and_yarn-2867179b1e
Open

chore(deps): bump nodemailer from 7.0.11 to 8.0.5 in the npm_and_yarn group across 1 directory#2876
dependabot[bot] wants to merge 2 commits intomainfrom
dependabot/npm_and_yarn/npm_and_yarn-2867179b1e

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github Apr 16, 2026

Bumps the npm_and_yarn group with 1 update in the / directory: nodemailer.

Updates nodemailer from 7.0.11 to 8.0.5

Release notes

Sourced from nodemailer's releases.

v8.0.5

8.0.5 (2026-04-07)

Bug Fixes

  • decode SMTP server responses as UTF-8 at line boundary (95876b1)
  • sanitize CRLF in transport name option to prevent SMTP command injection (GHSA-vvjj-xcjg-gr5g) (0a43876)

v8.0.4

8.0.4 (2026-03-25)

Bug Fixes

  • sanitize envelope size to prevent SMTP command injection (2d7b971)

v8.0.3

8.0.3 (2026-03-18)

Bug Fixes

  • clean up addressparser and fix group name fallback producing undefined (9d55877)
  • fix cookie bugs, remove dead code, and improve hot-path efficiency (e8c8b92)
  • refactor smtp-connection for clarity and add Node.js 6 syntax compat test (c5b48ea)
  • remove familySupportCache that broke DNS resolution tests (c803d90)

v8.0.2

8.0.2 (2026-03-09)

Bug Fixes

  • merge fragmented display names with unquoted commas in addressparser (fe27f7f)

v8.0.1

8.0.1 (2026-02-07)

Bug Fixes

  • absorb TLS errors during socket teardown (7f8dde4)
  • absorb TLS errors during socket teardown (381f628)
  • Add Gmail Workspace service configuration (#1787) (dc97ede)

v8.0.0

8.0.0 (2026-02-04)

... (truncated)

Changelog

Sourced from nodemailer's changelog.

8.0.5 (2026-04-07)

Bug Fixes

  • decode SMTP server responses as UTF-8 at line boundary (95876b1)
  • sanitize CRLF in transport name option to prevent SMTP command injection (GHSA-vvjj-xcjg-gr5g) (0a43876)

8.0.4 (2026-03-25)

Bug Fixes

  • sanitize envelope size to prevent SMTP command injection (2d7b971)

8.0.3 (2026-03-18)

Bug Fixes

  • clean up addressparser and fix group name fallback producing undefined (9d55877)
  • fix cookie bugs, remove dead code, and improve hot-path efficiency (e8c8b92)
  • refactor smtp-connection for clarity and add Node.js 6 syntax compat test (c5b48ea)
  • remove familySupportCache that broke DNS resolution tests (c803d90)

8.0.2 (2026-03-09)

Bug Fixes

  • merge fragmented display names with unquoted commas in addressparser (fe27f7f)

8.0.1 (2026-02-07)

Bug Fixes

  • absorb TLS errors during socket teardown (7f8dde4)
  • absorb TLS errors during socket teardown (381f628)
  • Add Gmail Workspace service configuration (#1787) (dc97ede)

8.0.0 (2026-02-04)

⚠ BREAKING CHANGES

  • Error code 'NoAuth' renamed to 'ENOAUTH'

Bug Fixes

... (truncated)

Commits
  • 202cfb3 chore(master): release 8.0.5 (#1809)
  • b634abf docs: add CLAUDE.md with project conventions and release process
  • 95876b1 fix: decode SMTP server responses as UTF-8 at line boundary
  • 0a43876 fix: sanitize CRLF in transport name option to prevent SMTP command injection...
  • 08e59e6 chore: update dev dependencies
  • 2d31975 chore(master): release 8.0.4 (#1806)
  • 2d7b971 fix: sanitize envelope size to prevent SMTP command injection
  • 4e702e9 chore(master): release 8.0.3 (#1804)
  • c803d90 fix: remove familySupportCache that broke DNS resolution tests
  • e8c8b92 fix: fix cookie bugs, remove dead code, and improve hot-path efficiency
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions
    You can disable automated security fix PRs for this repo from the Security Alerts page.

Bumps the npm_and_yarn group with 1 update in the / directory: [nodemailer](https://github.com/nodemailer/nodemailer).


Updates `nodemailer` from 7.0.11 to 8.0.5
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](nodemailer/nodemailer@v7.0.11...v8.0.5)

---
updated-dependencies:
- dependency-name: nodemailer
  dependency-version: 8.0.5
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <[email protected]>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Apr 16, 2026
@dependabot dependabot Bot requested a review from shige as a code owner April 16, 2026 02:15
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Apr 16, 2026
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 16, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
giselle Ready Ready Preview, Comment Apr 16, 2026 2:18am

Request Review

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 16, 2026

⚠️ No Changeset found

Latest commit: 7adfe52

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

💥 An error occurred when fetching the changed packages and changesets in this PR
Some errors occurred when validating the changesets config:
The package or glob expression "giselles-ai" is specified in the `ignore` option but it is not found in the project. You may have misspelled the package name or provided an invalid glob expression. Note that glob expressions must be defined according to https://www.npmjs.com/package/micromatch.

@giselles-ai
Copy link
Copy Markdown

giselles-ai Bot commented Apr 16, 2026

Finished running flow.

Step 1
🟢
On Pull Request OpenedStatus: Success Updated: Apr 16, 2026 2:15am
Step 2
🟢
Manual QAStatus: Success Updated: Apr 16, 2026 2:18am
🟢
Prompt for AI AgentsStatus: Success Updated: Apr 16, 2026 2:18am
Step 3
🟢
Create a Comment for PRStatus: Success Updated: Apr 16, 2026 2:20am
Step 4
🟢
Create Pull Request CommentStatus: Success Updated: Apr 16, 2026 2:21am

@giselles-ai
Copy link
Copy Markdown

giselles-ai Bot commented Apr 16, 2026

## 🔍 QA Testing Assistant by Giselle

### 📋 Manual QA Checklist

Based on the changes in this PR, here are the key areas to test manually:

  • Test: Core Email Sending Functionality

    1. Navigate to a feature in the application that triggers an email (e.g., user sign-up, password reset, contact form).
    2. Perform the action to send the email.
    3. Expected Result: The email is successfully sent and received at the destination address without any errors in the application logs.
  • Test: Email Content Verification

    1. Open the email received from the previous test.
    2. Expected Result: The email's content, including the subject, sender name (From), recipient address (To), and body, is rendered correctly and matches the expected template.
  • Test: Email with Special Characters and non-ASCII content

    1. If possible, trigger an email where the content (subject or body) includes special or non-ASCII characters (e.g., é, ü, ñ, ✨, こんにちは).
    2. Open the received email.
    3. Expected Result: The special characters are displayed correctly without any encoding issues (e.g., showing ? or ``). This verifies fixes related to UTF-8 handling in the new version.
  • Test: Email Address with Display Name

    1. If the system sends emails to or from addresses that include a display name (e.g., "Support Team" <[email protected]>), trigger an email using such a feature.
    2. Check the received email in an email client (like Gmail or Outlook).
    3. Expected Result: The email is delivered successfully, and the sender/recipient's display name is shown correctly in the email client.
  • Test: Error Handling for Email Sending Failure

    1. Intentionally misconfigure SMTP settings to simulate a sending failure (e.g., wrong password, invalid host).
    2. Trigger an email sending action (e.g., password reset).
    3. Expected Result: The application displays a user-friendly error message and does not crash or show a 500 error. Verify that no email is sent.

### ✨ Prompt for AI Agents

Use the following prompts with Cursor or Claude Code to automate E2E testing:

📝 E2E Test Generation Prompt

```
You are an expert QA engineer. Your task is to write comprehensive E2E tests using Playwright for a pull request that updates our application's nodemailer dependency from version 7 to version 8.

The primary goal is to ensure that all user flows involving email functionality remain intact and are not broken by this major dependency upgrade. Pay close attention to the breaking changes noted in the release logs and potential security vulnerabilities that have been patched.

1. Context Summary

  • PR Description: The PR is a dependency bump for nodemailer from v7.0.11 to v8.0.5. nodemailer is the library our application (studio.giselles.ai) uses to send all transactional emails.
  • Key Risk: This is a major version update, which introduces breaking changes. The release notes explicitly mention one: the error code 'NoAuth' has been renamed to 'ENOAUTH'. Our backend error handling might be affected, leading to unhandled exceptions. Additionally, several security fixes related to SMTP command injection have been applied.
  • Critical Paths to Test: We must validate every single user flow that triggers an email. This includes, but is not limited to:
    • User Registration / Account Creation (Welcome Email)
    • Password Reset Flow
    • "Contact Us" or support form submissions
    • User invitation emails

2. Test Scenarios

Create E2E tests covering the following scenarios. All tests must verify not only the UI feedback but also the actual email delivery and content using a mock email server.

Test File: Create a new test file named e2e/email-functionality.spec.ts.

Happy Path Scenarios:

  1. User Registration:

    • Description: A new user signs up for an account.
    • Steps: Navigate to the registration page, fill in user details with a unique email, and submit the form.
    • Verification:
      • Assert that the user sees a success message on the UI.
      • Assert that one email is sent to the user's address.
      • Assert the email subject is Welcome to Giselle's Studio!.
      • Assert the email body contains a welcome message and confirms the username.
  2. Password Reset:

    • Description: An existing user requests a password reset link.
    • Steps: Navigate to the "Forgot Password" page, enter the user's email, and submit.
    • Verification:
      • Assert the UI shows a confirmation message like "If an account exists, a reset link has been sent."
      • Assert that one email is sent to the user's address.
      • Assert the email subject is Reset Your Password.
      • Assert the email body contains a unique password reset link/token.

Edge Cases & Security Scenarios:

  1. Password Reset for Non-Existent User:

    • Description: A password reset is requested for an email address not in the system.
    • Steps: Navigate to the "Forgot Password" page, enter a non-existent email address (e.g., nonexistent-user-${Date.now()}@test.com), and submit.
    • Verification:
      • Assert the UI shows the exact same confirmation message as the happy path to prevent email enumeration.
      • Assert that NO email is sent to that address.
  2. Input Sanitization (SMTP Injection Attempt):

    • Description: Test the fixes for SMTP command injection (GHSA-vvjj-xcjg-gr5g).
    • Steps: In a form that sends an email (e.g., Registration or Contact Us), use an input field with carriage return/line feed characters.
    • Example: For the "Full Name" field, input: Test\r\nUser. For an email field, input: test\r\[email protected].
    • Verification:
      • The application should not crash or throw a 500 error.
      • The application should either reject the input with a validation error OR successfully send an email with the malicious characters sanitized (e.g., the recipient is [email protected], not test).
      • Verify the received email in the mock mail server to ensure its headers and body are not malformed.

Regression & Error Handling:

  1. Email Service Failure:
    • Description: Test the application's graceful handling of email sending failures. This indirectly tests the NoAuth -> ENOAUTH breaking change, as misconfigured error handling on the backend could lead to a frontend crash.
    • Setup: In this specific test, configure Playwright to use invalid SMTP credentials via environment variables before triggering an email flow (e.g., password reset).
    • Steps: Trigger the password reset flow.
    • Verification:
      • Assert that the application does not crash or show a generic server error page (like a 500 error).
      • Assert that a user-friendly error message is displayed on the UI (e.g., "Something went wrong. Please try again later.").
      • Assert that no email is sent.

3. Playwright Implementation Instructions

  • Email Catching Service:

    • Assume the test environment is configured to use a mock SMTP server like MailHog, which exposes an API to check received emails. The default MailHog API is typically at http://localhost:8025.
    • Create a utility helper function, getEmails(recipient?: string), that fetches messages from the MailHog API (/api/v2/messages). It should be able to filter emails by recipient.
    • Create another helper, clearEmails(), that sends a DELETE request to /api/v1/messages to ensure a clean state before each test. Use this in a test.beforeEach block.
    // e2e/utils/mailhog.helper.ts
    import { APIRequestContext } from '@playwright/test';
    
    const mailhogUrl = process.env.MAILHOG_URL || 'http://localhost:8025';
    
    export async function getEmails(request: APIRequestContext, recipient?: string) {
      const response = await request.get(`${mailhogUrl}/api/v2/messages`);
      const data = await response.json();
      if (recipient) {
        return data.items.filter(email => 
          email.Content.Headers.To.includes(recipient)
        );
      }
      return data.items;
    }
    
    export async function clearEmails(request: APIRequestContext) {
      await request.delete(`${mailhogUrl}/api/v1/messages`);
    }
  • Selectors: Use user-facing locators for resilience. Do not use auto-generated IDs or CSS classes.

    • page.getByRole('button', { name: /Sign Up/i })
    • page.getByLabel('Email')
    • page.getByPlaceholder('Enter your full name')
  • Assertions:

    • Use expect(page.getByText('...')).toBeVisible() for UI feedback.
    • For email verification, use the MailHog helper:
      test('should send a welcome email on user registration', async ({ page, request }) => {
          // ... registration steps
          const recipientEmail = '[email protected]';
          
          await expect(async () => {
            const emails = await getEmails(request, recipientEmail);
            expect(emails.length).toBe(1);
          }).toPass();
      
          const emails = await getEmails(request, recipientEmail);
          expect(emails[0].Content.Headers.Subject[0]).toBe("Welcome to Giselle's Studio!");
          expect(emails[0].Content.Body).toContain('Welcome to the studio');
      });

4. MCP Integration Guidelines

  • Environment Configuration:
    • Ensure the Playwright project is configured to load a .env file.
    • The .env file for the test environment should contain variables to point the application to the mock MailHog server:
      SMTP_HOST=localhost
      SMTP_PORT=1025
      SMTP_USER=
      SMTP_PASS=
      # For testing failure cases, we'll override these in the test itself.
  • Execution Command: Structure the command to run these specific tests.
    # Example command to run the new test file
    mcp playwright test --project=chromium --config=./apps/studio.giselles.ai/playwright.config.ts e2e/email-functionality.spec.ts

5. CI-Ready Code Requirements

  • Test Organization:

    • Place all tests in the new e2e/email-functionality.spec.ts file.
    • Use test.describe('Email Functionality', () => { ... }) to group the tests.
    • Use test.beforeEach to clear the mailbox and test.afterEach for any other necessary cleanup.
  • Independence & Parallelization:

    • Ensure each test is fully independent. Generate unique email addresses for each test run to prevent collisions. Example: const email = \test-user-${Date.now()}@example.com`;`.
  • Naming Conventions:

    • Use descriptive test names that clearly state the intent, like test('should send a password reset link to an existing user').
  • Error Handling:

    • Use Playwright's built-in retry-ability for assertions, especially for asynchronous operations like checking for emails (expect.toPass()). This makes tests more robust against minor timing issues.
      ```

---

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants