# Weweb mail plugin not working?

**URL:** <https://community.weweb.io/t/weweb-mail-plugin-not-working/3464>\
**Category:** Ask us anything\
**Created:** [July 11, 2023, 3:45am UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464 "2023-07-11T03:45:10Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![stevedesignerd](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/stevedesignerd/32/8487_2.png) [@stevedesignerd](https://community.weweb.io/u/stevedesignerd)\
**Post date:** [July 11, 2023, 3:45am UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/1 "2023-07-11T03:45:10Z")

</div>

Hi! I’m getting a 403 error using the weweb mail plugin but I don’t know why, I don’t have any variable formula or anything in the action. Can anyone please help me?

 ![Captura de pantalla 2023-07-10 a la(s) 10.44.03 p.m.](https://us1.discourse-cdn.com/flex016/uploads/weweb/original/2X/f/fb4c619816b4f032423ffa7a2aec103839768903.jpeg)

---

<div class="post-metadata">

**Author:** ![Joyce](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/joyce/32/13232_2.png) [@Joyce](https://community.weweb.io/u/Joyce)\
**Post date:** [July 11, 2023, 11:02am UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/2 "2023-07-11T11:02:33Z")

</div>

Hi @stevedesignerd 👋

> [@stevedesignerd](#):
>
> I don’t have any variable formula or anything in the action.

What do you mean? Can you clarify how you set up the “Send an email” action? How did you tell the action what recipient(s) should receive the email?

 ![CleanShot 2023-07-11 at 12.59.30@2x](https://us1.discourse-cdn.com/flex016/uploads/weweb/original/2X/e/ebd5f829d483450bd72dd2c0e6c5f2794f3d00d0.png)

It might also help us to see the information in the `response` of the error message you received. This will give us more information about what the error is and what might be causing it. Here’s an [article on how to debug workflows](https://docs.weweb.io/workflows/debugging.html) that might help.

---

<div class="post-metadata">

**Author:** ![stevedesignerd](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/stevedesignerd/32/8487_2.png) [@stevedesignerd](https://community.weweb.io/u/stevedesignerd)\
**Post date:** [July 11, 2023, 11:57am UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/3 "2023-07-11T11:57:38Z")

</div>

Hi Joyce thanks for the quick reply I mean, that I only used static info, like this:

 ![Captura de pantalla 2023-07-11 a la(s) 6.54.04 a.m.](https://us1.discourse-cdn.com/flex016/uploads/weweb/original/2X/a/a5c5269367a01649c3f953140d36de92db1d99d3.png)

and sure here’s the Error that I got 😃

```auto
name: "Error"
stack: "Error: Request failed with status code 403 at e.exports (https://editor-cdn.weweb.io/public/js/chunk-vendors.7f825e18.js:1:103697) at e.exports (https://editor-cdn.weweb.io/public/js/chunk-vendors.7f825e18.js:1:106145) at XMLHttpRequest.b (https://editor-cdn.weweb.io/public/js/chunk-vendors.7f825e18.js:1:98276)"
message: "Request failed with status code 403"
isAxiosError: true
toJSON: function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}
config
adapter: function(e){return new Promise((function(t,n){var h,f=e.data,p=e.headers,m=e.responseType;function g(){e.cancelToken&&e.cancelToken.unsubscribe(h),e.signal&&e.signal.removeEventListener("abort",h)}r.isFormData(f)&&delete p["Content-Type"];var _=new XMLHttpRequest;if(e.auth){var y=e.auth.username||"",v=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";p.Authorization="Basic "+btoa(y+":"+v)}var w=s(e.baseURL,e.url);function b(){if(_){var r="getAllResponseHeaders"in _?A(_.getAllResponseHeaders()):null,o=m&&"text"!==m&&"json"!==m?_.response:_.responseText,a={data:o,status:_.status,statusText:_.statusText,headers:r,config:e,request:_};i((function(e){t(e),g()}),(function(e){n(e),g()}),a),_=null}}if(_.open(e.method.toUpperCase(),a(w,e.params,e.paramsSerializer),!0),_.timeout=e.timeout,"onloadend"in _?_.onloadend=b:_.onreadystatechange=function(){_&&4===_.readyState&&(0!==_.status||_.responseURL&&0===_.responseURL.indexOf("file:"))&&setTimeout(b)},_.onabort=function(){_&&(n(c("Request aborted",e,"ECONNABORTED",_)),_=null)},_.onerror=function(){n(c("Network Error",e,null,_)),_=null},_.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||l;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(c(t,e,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",_)),_=null},r.isStandardBrowserEnv()){var B=(e.withCredentials||u(w))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;B&&(p[e.xsrfHeaderName]=B)}"setRequestHeader"in _&&r.forEach(p,(function(e,t){"undefined"===typeof f&&"content-type"===t.toLowerCase()?delete p[t]:_.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(_.withCredentials=!!e.withCredentials),m&&"json"!==m&&(_.responseType=e.responseType),"function"===typeof e.onDownloadProgress&&_.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&_.upload&&_.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(h=function(e){_&&(n(!e||e&&e.type?new d("canceled"):e),_.abort(),_=null)},e.cancelToken&&e.cancelToken.subscribe(h),e.signal&&(e.signal.aborted?h():e.signal.addEventListener("abort",h))),f||(f=null),_.send(f)}))}
timeout: 0
xsrfCookieName: "XSRF-TOKEN"
xsrfHeaderName: "X-XSRF-TOKEN"
maxContentLength: -1
maxBodyLength: -1
validateStatus: function(e){return e>=200&&e<300}
method: "post"
url: "https://api.weweb.io/v1/designs/f41c1e0b-d300-4352-bd09-e3175a5687ab/send-email"
data: "{"recipients":["meli.mail@stevedesingerd.com"],"subject":"test subject","content":"testmail"}"
transitional
silentJSONParsing: true
forcedJSONParsing: true
clarifyTimeoutError: false
transformRequest
0: function(e,t){return i(t,"Accept"),i(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(A(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):r.isObject(e)||t&&"application/json"===t["Content-Type"]?(A(t,"application/json"),c(e)):e}
transformResponse
0: function(e){var t=this.transitional||l.transitional,n=t&&t.silentJSONParsing,i=t&&t.forcedJSONParsing,a=!n&&"json"===this.responseType;if(a||i&&r.isString(e)&&e.length)try{return JSON.parse(e)}catch(s){if(a){if("SyntaxError"===s.name)throw o(s,this,"E_JSON_PARSE");throw s}}return e}
headers
Accept: "application/json, text/plain, */*"
Content-Type: "application/json"
request
onreadystatechange: null
readyState: 4
timeout: 0
withCredentials: false
responseURL: "https://api.weweb.io/v1/designs/f41c1e0b-d300-4352-bd09-e3175a5687ab/send-email"
status: 403
statusText: ""
responseType: ""
response: "{"message":"RATE_LIMIT_EXCEDEED"}"
responseText: "{"message":"RATE_LIMIT_EXCEDEED"}"
responseXML: null
UNSENT: 0
OPENED: 1
HEADERS_RECEIVED: 2
LOADING: 3
DONE: 4
abort: function abort() { [native code] }
getAllResponseHeaders: function getAllResponseHeaders() { [native code] }
getResponseHeader: function getResponseHeader() { [native code] }
open: function open() { [native code] }
overrideMimeType: function overrideMimeType() { [native code] }
send: function send() { [native code] }
setRequestHeader: function setRequestHeader() { [native code] }
onloadstart: null
onprogress: null
onabort: function(){_&&(n(c("Request aborted",e,"ECONNABORTED",_)),_=null)}
onerror: function(){n(c("Network Error",e,null,_)),_=null}
onload: null
ontimeout: function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||l;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(c(t,e,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",_)),_=null}
onloadend: function b(){if(_){var r="getAllResponseHeaders"in _?A(_.getAllResponseHeaders()):null,o=m&&"text"!==m&&"json"!==m?_.response:_.responseText,a={data:o,status:_.status,statusText:_.statusText,headers:r,config:e,request:_};i((function(e){t(e),g()}),(function(e){n(e),g()}),a),_=null}}
addEventListener: function addEventListener() { [native code] }
dispatchEvent: function dispatchEvent() { [native code] }
removeEventListener: function removeEventListener() { [native code] }
upload
Object
response
status: 403
statusText: ""
data
message: "RATE_LIMIT_EXCEDEED"
headers
content-length: "33"
content-type: "application/json; charset=utf-8"
config
adapter: function(e){return new Promise((function(t,n){var h,f=e.data,p=e.headers,m=e.responseType;function g(){e.cancelToken&&e.cancelToken.unsubscribe(h),e.signal&&e.signal.removeEventListener("abort",h)}r.isFormData(f)&&delete p["Content-Type"];var _=new XMLHttpRequest;if(e.auth){var y=e.auth.username||"",v=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";p.Authorization="Basic "+btoa(y+":"+v)}var w=s(e.baseURL,e.url);function b(){if(_){var r="getAllResponseHeaders"in _?A(_.getAllResponseHeaders()):null,o=m&&"text"!==m&&"json"!==m?_.response:_.responseText,a={data:o,status:_.status,statusText:_.statusText,headers:r,config:e,request:_};i((function(e){t(e),g()}),(function(e){n(e),g()}),a),_=null}}if(_.open(e.method.toUpperCase(),a(w,e.params,e.paramsSerializer),!0),_.timeout=e.timeout,"onloadend"in _?_.onloadend=b:_.onreadystatechange=function(){_&&4===_.readyState&&(0!==_.status||_.responseURL&&0===_.responseURL.indexOf("file:"))&&setTimeout(b)},_.onabort=function(){_&&(n(c("Request aborted",e,"ECONNABORTED",_)),_=null)},_.onerror=function(){n(c("Network Error",e,null,_)),_=null},_.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||l;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(c(t,e,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",_)),_=null},r.isStandardBrowserEnv()){var B=(e.withCredentials||u(w))&&e.xsrfCookieName?o.read(e.xsrfCookieName):void 0;B&&(p[e.xsrfHeaderName]=B)}"setRequestHeader"in _&&r.forEach(p,(function(e,t){"undefined"===typeof f&&"content-type"===t.toLowerCase()?delete p[t]:_.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(_.withCredentials=!!e.withCredentials),m&&"json"!==m&&(_.responseType=e.responseType),"function"===typeof e.onDownloadProgress&&_.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&_.upload&&_.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(h=function(e){_&&(n(!e||e&&e.type?new d("canceled"):e),_.abort(),_=null)},e.cancelToken&&e.cancelToken.subscribe(h),e.signal&&(e.signal.aborted?h():e.signal.addEventListener("abort",h))),f||(f=null),_.send(f)}))}
timeout: 0
xsrfCookieName: "XSRF-TOKEN"
xsrfHeaderName: "X-XSRF-TOKEN"
maxContentLength: -1
maxBodyLength: -1
validateStatus: function(e){return e>=200&&e<300}
method: "post"
url: "https://api.weweb.io/v1/designs/f41c1e0b-d300-4352-bd09-e3175a5687ab/send-email"
data: "{"recipients":["meli.mail@stevedesingerd.com"],"subject":"test subject","content":"testmail"}"
transitional
silentJSONParsing: true
forcedJSONParsing: true
clarifyTimeoutError: false
transformRequest
0: function(e,t){return i(t,"Accept"),i(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(A(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):r.isObject(e)||t&&"application/json"===t["Content-Type"]?(A(t,"application/json"),c(e)):e}
transformResponse
0: function(e){var t=this.transitional||l.transitional,n=t&&t.silentJSONParsing,i=t&&t.forcedJSONParsing,a=!n&&"json"===this.responseType;if(a||i&&r.isString(e)&&e.length)try{return JSON.parse(e)}catch(s){if(a){if("SyntaxError"===s.name)throw o(s,this,"E_JSON_PARSE");throw s}}return e}
headers
Accept: "application/json, text/plain, */*"
Content-Type: "application/json"
request
onreadystatechange: null
readyState: 4
timeout: 0
withCredentials: false
responseURL: "https://api.weweb.io/v1/designs/f41c1e0b-d300-4352-bd09-e3175a5687ab/send-email"
status: 403
statusText: ""
responseType: ""
response: "{"message":"RATE_LIMIT_EXCEDEED"}"
responseText: "{"message":"RATE_LIMIT_EXCEDEED"}"
responseXML: null
UNSENT: 0
OPENED: 1
HEADERS_RECEIVED: 2
LOADING: 3
DONE: 4
abort: function abort() { [native code] }
getAllResponseHeaders: function getAllResponseHeaders() { [native code] }
getResponseHeader: function getResponseHeader() { [native code] }
open: function open() { [native code] }
overrideMimeType: function overrideMimeType() { [native code] }
send: function send() { [native code] }
setRequestHeader: function setRequestHeader() { [native code] }
onloadstart: null
onprogress: null
onabort: function(){_&&(n(c("Request aborted",e,"ECONNABORTED",_)),_=null)}
onerror: function(){n(c("Network Error",e,null,_)),_=null}
onload: null
ontimeout: function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||l;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(c(t,e,r.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",_)),_=null}
onloadend: function b(){if(_){var r="getAllResponseHeaders"in _?A(_.getAllResponseHeaders()):null,o=m&&"text"!==m&&"json"!==m?_.response:_.responseText,a={data:o,status:_.status,statusText:_.statusText,headers:r,config:e,request:_};i((function(e){t(e),g()}),(function(e){n(e),g()}),a),_=null}}
addEventListener: function addEventListener() { [native code] }
dispatchEvent: function dispatchEvent() { [native code] }
removeEventListener: function removeEventListener() { [native code] }
upload
onloadstart: null
onprogress: null
onabort: null
onerror: null
onload: null
ontimeout: null
onloadend: null
addEventListener: function addEventListener() { [native code] }
dispatchEvent: function dispatchEvent() { [native code] }
removeEventListener: function removeEventListener() { [native code] }

```

---

<div class="post-metadata">

**Author:** ![Joyce](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/joyce/32/13232_2.png) [@Joyce](https://community.weweb.io/u/Joyce)\
**Post date:** [July 12, 2023, 2:01pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/4 "2023-07-12T14:01:57Z")

</div>

Hi @stevedesignerd 👋

It looks like you reached your rate limits. The limit is 10 mails / hour / user / project.

We can increase this for you but you’d need to reach out to @Slavo to discuss your needs & the additional cost attached.

Otherwise, we’d recommend using your own emailing service through your backend. We discuss the Sendgrid + Xano combo in our [user docs on creating a “forgot password” flow](https://docs.weweb.io/plugins/auth-systems/xano-auth.html#forgot-password-with-xano-auth).

---

<div class="post-metadata">

**Author:** ![stevedesignerd](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/stevedesignerd/32/8487_2.png) [@stevedesignerd](https://community.weweb.io/u/stevedesignerd)\
**Post date:** [July 12, 2023, 2:32pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/5 "2023-07-12T14:32:40Z")

</div>

Hi Joyce that’s odd because I haven’t use the mail plugin before and I’m only creating a workflow that sends a single email but it’s not working.

---

<div class="post-metadata">

**Author:** ![Joyce](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/joyce/32/13232_2.png) [@Joyce](https://community.weweb.io/u/Joyce)\
**Post date:** [July 12, 2023, 2:49pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/6 "2023-07-12T14:49:07Z")

</div>

That’s what the error message suggests. Any chance you tested the workflow 10+ times in a row?

Feel free to [report a bug here](https://support.weweb.io/) so we can investigate further if you think that can’t be the reason. Maybe wait a few hours without testing the workflow just to make sure.

---

<div class="post-metadata">

**Author:** ![JamesPan](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/jamespan/32/3594_2.png) [@JamesPan](https://community.weweb.io/u/JamesPan)\
**Post date:** [August 7, 2023, 4:43am UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/7 "2023-08-07T04:43:54Z")

</div>

Hi @Joyce, may I ask about the Xano + Sendgrid combo you suggest? Is it also possible to do the combo with Supabase + Sendgrid?

Thank you.

---

<div class="post-metadata">

**Author:** ![Joyce](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/joyce/32/13232_2.png) [@Joyce](https://community.weweb.io/u/Joyce)\
**Post date:** [August 7, 2023, 12:59pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/8 "2023-08-07T12:59:14Z")

</div>

Hi @JamesPan 👋

I’m sure you can set up a Supabase + Sendgrid combo, yes. In fact, you should be able to set up any backend + email provider combo. Not sure how “no-code” it will be though 😕

To set up Supabase + Sendgrid specifically, I would recommend looking into:

- this [Supabase user doc article on sending emails](https://supabase.com/docs/guides/functions/examples/send-emails) (pretty technical), and
- exploring automation tools that provide a no-code way of linking Supabase and Sendgrid together (found promising articles [on n8n](https://n8n.io/integrations/sendgrid/and/supabase/) and [Pipedream](https://pipedream.com/apps/supabase/integrations/sendgrid))

---

<div class="post-metadata">

**Author:** ![jaredgibb](https://avatars.discourse-cdn.com/v4/letter/j/ecd19e/32.png) [@jaredgibb](https://community.weweb.io/u/jaredgibb)\
**Post date:** [August 7, 2023, 1:53pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/9 "2023-08-07T13:53:20Z")

</div>

I use postmark + supabase. I send all my emails from edge functions so I can use custom templates.

---

<div class="post-metadata">

**Author:** ![JamesPan](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/jamespan/32/3594_2.png) [@JamesPan](https://community.weweb.io/u/JamesPan)\
**Post date:** [August 7, 2023, 5:45pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/10 "2023-08-07T17:45:32Z")

</div>

Thank you, both @Joyce and @jaredgibb, for your answers. 🙏 But it seems like both options are a bit out of my league at the moment, so let me focus on different aspects of the website first and come back later regarding the email aspect when I have more time to get deeper into it.

---

<div class="post-metadata">

**Author:** ![Joyce](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/joyce/32/13232_2.png) [@Joyce](https://community.weweb.io/u/Joyce)\
**Post date:** [August 9, 2023, 1:45pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/11 "2023-08-09T13:45:43Z")

</div>

Sounds like a plan!

Don’t hesitate to reach out if you need help when you get there 🙂

---

<div class="post-metadata">

**Author:** ![JamesPan](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/jamespan/32/3594_2.png) [@JamesPan](https://community.weweb.io/u/JamesPan)\
**Post date:** [August 9, 2023, 9:32pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/12 "2023-08-09T21:32:20Z")

</div>

Thank you! 🙏 Yes, I will!

---

<div class="post-metadata">

**Author:** ![oceans2892](https://avatars.discourse-cdn.com/v4/letter/o/bb73d2/32.png) [@oceans2892](https://community.weweb.io/u/oceans2892)\
**Post date:** [April 2, 2024, 7:11pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/14 "2024-04-02T19:11:17Z")

</div>

@stevedesignerd did you find the source of the issue? or was it actually a bug? am experiencing the same

---

<div class="post-metadata">

**Author:** ![stevedesignerd](https://sea2.discourse-cdn.com/flex016/user_avatar/community.weweb.io/stevedesignerd/32/8487_2.png) [@stevedesignerd](https://community.weweb.io/u/stevedesignerd)\
**Post date:** [April 2, 2024, 7:44pm UTC](https://community.weweb.io/t/weweb-mail-plugin-not-working/3464/15 "2024-04-02T19:44:47Z")

</div>

Hey for me it was a bug. I created another project and test it from scratch and it worked
