使用Netlify lambda函数从GatsbyJS网站发送电子邮件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Netlify lambda函数从GatsbyJS网站发送电子邮件相关的知识,希望对你有一定的参考价值。

我正在按照本教程https://dev.to/char_bone/using-netlify-lambda-functions-to-send-emails-from-a-gatsbyjs-site-3pnb进行所有设置,但是在终端中出现以下错误。我可以从此处https://www.gatsbyjs.org/blog/2018-12-17-turning-the-static-dynamic/获得可用于lambda函数的hello world应用程序,这是开始第一个教程的先决条件。

RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined

这里是带有表单的代码。您也可以在下面查看整个回购。

import React from 'react'
import  HelmetDatoCms  from 'gatsby-source-datocms'
import  graphql  from 'gatsby'
import Layout from "../components/layout"

export default ( data ) => 

  const [formState, setFormState] = React.useState(
    name: "",
    email: "",
    subject: "",
    message: "",
  )

  const onChange = (e) => 
    setFormState(...formState, [e.target.name]: e.target.value );
 

 const submitForm = async (e) => 
  e.preventDefault();

  console.log("test");

  try
    const response = await fetch("/.netlify/functions/sendmail", 
      method: "POST",
      body: JSON.stringify(formState),
    )

    if (!response.ok) 
      console.log(response);
      return
    

    console.log("success email");

   catch(e)

    console.log("error");

  


  return(

  <Layout>

    <article className="sheet">
      <HelmetDatoCms seo=data.datoCmsPricing.seoMetaTags />

        <section className="left-package-details">

          tests

        <div className="App">
      <form onSubmit=submitForm>
        <label>
          Name
          <input
            type="text"
            name="name"
            value=formState.name
            onChange=onChange
          />
        </label>
        <label>
          Email
          <input
            type="email"
            name="email"
            value=formState.email
            onChange=onChange
          />
        </label>
        <label>
          Subject
          <input
            type="textarea"
            name="subject"
            value=formState.subject
            onChange=onChange
          />
        </label>
        <label>
          message
          <input
            type="text"
            name="message"
            value=formState.message
            onChange=onChange
          />
        </label>
        <button type="submit">Submit</button>
      </form>
    </div>


  )

更新

现在基于Pierre的答案,我得到了500错误

Request from ::ffff:127.0.0.1: POST /sendmail 
Response with status 500 in 3 ms.

我想知道它是否与从本地主机POST'有关,至少我知道它是sendgrid现在给我错误。

我看了npm调试部分,看到了这段代码,不确定确切的位置吗?

const 
  classes: 
    Mail,
  ,
 = require('@sendgrid/helpers');
const mail = Mail.create(data);
const body = mail.toJSON();
console.log(body);

控制台错误

Response type: "basic", url: "http://localhost:8000/.netlify/functions/sendmail", redirected: false, status: 500, ok: false, …
type: "basic"
url: "http://localhost:8000/.netlify/functions/sendmail"
redirected: false
status: 500
ok: false
statusText: "Internal Server Error"
headers: Headers 
body: (...)
bodyUsed: false
__proto__: Response

第二次更新

我现在在终端中遇到以下错误实际上,我什至不需要连抄送,我想这是说我没有价值,所以也许我的env变量SENDGRID_TO_EMAIL没有通过?] >

Provide at least one of to, cc or bcc 

现在,如果我添加这样的抄送

const msg = 
        to: SENDGRID_TO_EMAIL,
        cc:"email@email.com",
        from: email,
        subject: subject ? subject : 'Contact Form Submission',
        html: body,
    ;

然后我收到Unauthorized消息

对于我的环境变量,我的根目录下有一个.env文件,其中包含以下内容

SENDGRID_API_KEY=SG.longsting
SENDGRID_TO_EMAIL=myemail@email.com

这是应该获取环境变量的行

const  SENDGRID_API_KEY, SENDGRID_TO_EMAIL  = process.env

我正在按照本教程https://dev.to/char_bone/using-netlify-lambda-functions-to-send-emails-from-a-gatsbyjs-site-3pnb进行了所有设置,但得到了以下内容我的终端错误。我...

答案

看着your source code,我很确定sendgrid send函数会引发异常,并且您不能正确处理它:

以上是关于使用Netlify lambda函数从GatsbyJS网站发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

通过 github.io 渲染静态网页不起作用 - 对于使用 gatsby 创建的网站/从 github repo 托管在 netlify 上的网站

卡在构建 gatsby-starter-netlify-cms

将 Gatsby + Contentful 网站部署到 Netlify

Gatsby + contentful + Netlify 的私人/登录部分

使用 gatsby 解决 netlify 上的 firebase 身份验证(谷歌登录)部署错误

将 Gatsby 博客部署到 Netlify 时出错