# SendGrid

[SendGrid ](https://sendgrid.com/why-sendgrid/)este unul dintre cele mai populare servicii pentru expedierea mail-urilor în Cloud. Este rapid, sigur, ușor de configurat, integrat și folosit și are o ofertă gratuită mai mult decât suficientă pentru nevoile acestui demo.

* Treceți prin procesul de creare a unui cont SendGrid (default options, nothing fancy) și verificați-vă contul
* **Generați un API Key** (din dashboard -> Click Settings -> API Key -> Create API Key -> Give it a name -> Full Access -> Create and View). Dacă nu vă descurcați (interfața nu e chiar user-friendly), urmăriți video-ul de [aici](https://www.youtube.com/watch?v=DA2ubUEV1uQ).
* Introduceți API Key-ul în fișierul .env al proiectului asociat Back-end-ului

```
// .env
SENDGRID_API_KEY= ...
```

<mark style="color:red;">**ATENȚIE!**</mark> API key-ul general este **SECRET**, nu trebuie să fie distribuit / publicat. De asemenea, așa cum vă atenționează și platforma, este afișat o singură dată, așa că este indicat să îl salvați într-un loc sigur înainte să închideți pagina.

* În proiectul asociat Back-end-ului vom instala **pachetul mail din sendgrid**

```shell
npm install @sendgrid/mail
```

* Pentru a păstra codul cât mai curat, vom crea un **nou fișier numit mailFunctions.js** în **folderul utils** în care vom defini logica specifică trimiterii de mail-uri

```
// mailFunctions.js
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const dotenv = require("dotenv");
dotenv.config();

const sendMail = (receiver, sender, subject, msg) => {
  const msgToSend = {
    to: receiver,
    from: sender,
    subject: subject,
    text: msg,
    //html: "...",
  };

  sgMail
    .send(msgToSend)
    .then((response) => {
      console.log(response[0].statusCode);
      return response[0].statusCode;
    })
    .catch((error) => {
      console.error(error);
    });
};

module.exports = {
    sendMail,
}
```

* Putem testa trimiterea cu succes a mail-urilor importând si apelând metoda **sendMail(...) din index.js.&#x20;**<mark style="color:red;">**Atenție!**</mark> Dacă folosiți nodemon, index.js și implicit funcția sendMail pe care o testăm vor fi rulate din nou la fiecare nou save. Comentați / stergeți funcția după ce ați testat-o cu succes pentru a evita spam-ul

```
// index.js
const {sendMail} = require("./utils/mailFunctions.js");
sendMail([adresapersonala], [adresapersonala], "TestSubject", "TestMessage");
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gurita-alexandru.gitbook.io/cloud-computing-2022-simpre/seminar-2/sendgrid.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
