node.js - TS - NodeMailer OAuth2 'auth' finns inte i typ 'TransportOptions'


Jag har ett problem. Jag behöver skapa en funktion för att skicka e-post med Gmail API. I dokumentationen står det att jag ska skapa en createTransport-funktion på detta sätt:

    const transport = nodemailer.createTransport({
      service: "gmail",
      auth: {
        type: "OAuth2",
        user: "[email ",
        clientId: CLIENT_ID,
        clientSecret: CLIENT_SECRET,
        refreshToken: REFRESH_TOKEN,
        accessToken: accessToken,
      },
    })

DOKUMENT

Men allt blir rött och återkommer: Fel

Någon lösning? Tack.

Svar #1

Det finns ett problem med typ script när du försöker skicka accessToken eftersom i google oauth2client är returtypen av getAccessToken() https://github.com/googleapis/google-auth-library-nodejs/blob/b0ddb7512fb9ed1e51b6874b7376d7e1f26be644/src/auth/oauth2client.ts#L331

det stöds inte av de typer av nodemailer som bör vara sträng: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/7827d853a1d623dd5345d9a11ced3e15eb5d3d8b/types/nodemailer/lib/xoauth2.d.ts#L24

genom att titta på returtypen av getAccessToken kan du se att tokenet är inuti och har typen string, så för att fixa det, bara destrukturera ditt token från accessToken.

const transport = nodemailer.createTransport({
  service: "gmail",
  auth: {
    type: "OAuth2",
    user: "[email ",
    clientId: CLIENT_ID,
    clientSecret: CLIENT_SECRET,
    refreshToken: REFRESH_TOKEN,
    accessToken: accessToken.token,
  },
})

Svar #2

1/

const transport = nodemailer.createTransport({
  service: String("gmail") || "",
  auth: {
    type: String("OAuth2"),
    user: String(SENDER_MAIL),
    clientId: String(CLIENT_ID),
    clientSecret: String(CLIENT_SECRET),
    refreshToken: String(REFRESH_TOKEN),
    access_token: String(access_token),
  },
});
and the ERRO WITH MSG :
    [ERROR] 14:02:23 ⨯ Unable to compile TypeScript:
    server/config/sendmail.ts(25,7): error TS2769: No overload matches this call.
      The last overload gave the following error.
    Argument of type '{ service: string; auth: { type: string; user: string; clientId:string; clientSecret:string; refreshToken:string; access_token:GetAccessTokenResponse; }; }' is not assignable to parameter of type 'TransportOptions | Transport<unknown>'.
    Object literal may only specify known properties, and 'service' does not exist in type 'TransportOptions | Transport<unknown>'.