<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ulzahk</title>
    <description>The latest articles on DEV Community by Ulzahk (@ulzahk).</description>
    <link>https://dev.to/ulzahk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F522458%2F880ca719-ca6a-4eb3-9030-faf9be65a72e.jpeg</url>
      <title>DEV Community: Ulzahk</title>
      <link>https://dev.to/ulzahk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ulzahk"/>
    <language>en</language>
    <item>
      <title>Project: Basic Authentication System</title>
      <dc:creator>Ulzahk</dc:creator>
      <pubDate>Tue, 11 May 2021 13:05:22 +0000</pubDate>
      <link>https://dev.to/ulzahk/project-basic-authentication-system-2mjp</link>
      <guid>https://dev.to/ulzahk/project-basic-authentication-system-2mjp</guid>
      <description>&lt;h2&gt;
  
  
  Table Of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Project Structure&lt;/li&gt;
&lt;li&gt;Authentication Level Zero&lt;/li&gt;
&lt;li&gt;Authentication Level One&lt;/li&gt;
&lt;li&gt;Authentication Level One Advantages and Disadvantages&lt;/li&gt;
&lt;li&gt;References&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you hear or see the word authentication you relate it to identification and that is a correct approach to this term. We just need to add permissions to perform a specific action in an app and we will have a more complete definition for the technology area.&lt;/p&gt;

&lt;p&gt;In this project we are going to have a series of authentication systems in order to better understand what they need, how they are built and how they work. &lt;/p&gt;

&lt;p&gt;Of course being these kind of security systems, they need something to protect, in this occasion we established a list of Pokémon cards with which the user will get the permission to see them and interact with the search engine to sort them in order of pokemon type or by the name of the pokemon.&lt;/p&gt;

&lt;p&gt;For this post we will cover the first authentication structure. So let's get started&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Structure &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;We will use two repositories, one to manage the visual part, user interface and forms with technologies such as React for the development of interfaces, Sass to style those interfaces and Webpack to compile the application in a lighter and more adaptable format for browsers.&lt;/p&gt;

&lt;p&gt;The second repository will be used to handle requests, database queries and information transformation. We will use technologies such as Node to be able to handle JavaScript from the Backend side, Express to create endpoints faster and PostgreSQL to handle the connection to this type of database and queries.&lt;/p&gt;

&lt;p&gt;Finally we have the servers these would be the platforms, Vercel to host both parts working and ElephantSQL that offers PostgreSQL databases ideal for projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication Level Zero &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frk2q90lr7vafsz3gq92j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frk2q90lr7vafsz3gq92j.png" alt="Alt Text" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to understand how the project would be if it did not have authentications, this section is created where it is simulated that the data is exposed and any user can manipulate it without having permissions to do so.&lt;/p&gt;

&lt;p&gt;It is also a quick way to know what we are protecting, a list of cards of the first generation Pokémons. By fetching the information from PokéAPI, we get pokémons with their name, types, an image that represents them and their identifier as a label.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication Level One &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4g32y7d0lsj2wwk728kv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4g32y7d0lsj2wwk728kv.png" alt="Alt Text" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this first level we are going to build a simple login with username and password without email verification. In order to understand how it would be useful to us and what disadvantages it presents.&lt;/p&gt;

&lt;p&gt;This will start to work the moment the user fills the form for the creation of an account correctly and presses the create account button. This will send a request to the Backend, to confirm if the data is correct, mainly that all the data is complete. &lt;/p&gt;

&lt;p&gt;If so, the password is encrypted first, then the new user's information is written into the database, and then a correct response is sent to the Frontend to redirect the user to the login form.&lt;/p&gt;

&lt;p&gt;This can be seen in the following diagram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqcxavew58uw064o6irx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqcxavew58uw064o6irx.png" alt="Alt Text" width="461" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here I share the function that handles the endpoint (file UsersController.js):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class UsersController{
  async createUser(req, res){
    const {body: user} = req;
    try {
      const createdUser = await usersService.createUser({ user });
      res.status(201).json({
        message: 'User created',
        user: createdUser
      });
    } catch (err) {
      console.log(err);
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is the function in the Backend, where we verify the table fields, add a unique identifier and encrypt the password before writing the information (file UsersService.js):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { client } = require('../../config/database');
const { v4: uuid }  = require('uuid');
const bcrypt = require('bcrypt');

class UsersService {
  constructor(){
    this.table = 'users',
    this.fields = 'id, username, password, email'
  }

  async createUser({ user }){
    const { username, password, email, fullName } = user
    try {
      const id = uuid();
      const encriptedPassword = await bcrypt.hash(password, 10);
      const lowerCaseEmail = email.toLowerCase();
      const userCreated = await client.query(
        `INSERT INTO ${this.table}(${this.fields}) VALUES (
          '${id}',
          '${username}',
          '${encriptedPassword}',
          '${lowerCaseEmail}',
        )`
      )
      return userCreated.rowCount;
    } catch (err) {
      console.error(err);
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06iv64pprgvs9d5nud5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06iv64pprgvs9d5nud5g.png" alt="Alt Text" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the login a very similar process is done, what varies is the Backend processing where the existence of that user is confirmed, the password is verified to be correct and if everything is OK a response is sent with a JSON Web Token.&lt;/p&gt;

&lt;p&gt;This token will be stored locally in Frontend with the browser's window.localStorage.setItem() function so that it can be used in requests that require it as a value in a header.&lt;/p&gt;

&lt;p&gt;Diagram of the login process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7tduehn5gch1fq8su83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7tduehn5gch1fq8su83.png" alt="Alt Text" width="461" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Function that handles the login endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  async loginUser (req, res){
    const { user, password } = req.body;
    try {
      if(!user || !password) res.status(401).send('Invalid information');

      let userData;

      const userDataByUsername = await usersService.getUserByUsername({user});
      if(userDataByUsername.length === 0) {
        const userDataByEmail = await usersService.getUserByEmail({user});
        if(userDataByEmail.length === 0) res.status(401).send('Invalid information');
        userData = userDataByEmail;
      } else {
        userData = userDataByUsername;
      };

      const comparedPassword = await bcrypt.compare(password, userData.password);
      if(!comparedPassword) res.status(401).send('Invalid information');
      const token = jwtAuthenticationService.JWTIssuer({user: userData.id}, '15 min');
      res.status(200).json({ token: token })
    } catch (err) {
      console.log(err)
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Function to consult users by username:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  async getUserByUsername({ user }){
    try {
      const userData = await client.query(`SELECT * FROM ${this.table} WHERE username='${user}'`)
      return userData.rows[0] || [];
    } catch (err) {
      console.error(err)
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Function to consult users by email:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  async getUserByEmail({ user }){
    try {
      const lowerCaseEmail = user.toLowerCase()
      const userData = await client.query(`SELECT * FROM ${this.table} WHERE email='${lowerCaseEmail}'`)
      return userData.rows[0] || [];
    } catch (err) {
      console.error(err)
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, the last thing that happens is that Frontend performs a query using the token to bring the user information and display the username.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkuqin9jggf5pjevojtl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmkuqin9jggf5pjevojtl.png" alt="Alt Text" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the function that takes care of this endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  async listUserById(req, res){
    const { bearertoken } = req.headers;
    if(!bearertoken) res.status(401).json({message: 'Request without token'})

    const tokenData = await jwtAuthenticationService.JWTVerify(bearertoken)
    if(tokenData === undefined) res.status(401).json({message: 'Invalid token'})

    const userId = tokenData.user;

    try {
      const userData = await usersService.getUserById({ userId });
      res.status(200).json({
        message: 'User listed',
        user: {
          id: userData.id,
          username: userData.username,
          email: userData.email,
        }
      })
    } catch (err) {
      console.log('listUserById error: ', err);
    }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Authentication Level One Advantages and Disadvantages &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Advantages
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Easy to implement in any application&lt;/li&gt;
&lt;li&gt;Quick way to create users and be able to relate them to the other services of the application.&lt;/li&gt;
&lt;li&gt;Gradually more verifications and safety elements can be added.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Disadvantages
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;It has a low level of security compared to other authentication structures.&lt;/li&gt;
&lt;li&gt;In case of password loss, it is necessary to contact support directly to change the password.&lt;/li&gt;
&lt;li&gt;If maintained in this manner without implementing further security measures, there is a risk of being breached.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you noticed the account creation endpoint has no user verification so someone can create an account with the same email and username without any restriction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How did we prevent this situation from happening? Share your answer in the comments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lastly, now that you know the functionality of this application I invite you to review it, try it and leave me your suggestions to improve it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App Demo: &lt;a href="https://frontend-bas-ulzahk.vercel.app/" rel="noopener noreferrer"&gt;https://frontend-bas-ulzahk.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;﻿If you want to review the application documentation, here I share the repositories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App Repository: &lt;a href="https://github.com/Ulzahk/Frontend-BAS" rel="noopener noreferrer"&gt;https://github.com/Ulzahk/Frontend-BAS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API Repository: &lt;a href="https://github.com/Ulzahk/Backend-BAS" rel="noopener noreferrer"&gt;https://github.com/Ulzahk/Backend-BAS&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  References &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;PokéAPI: &lt;a href="https://pokeapi.co/" rel="noopener noreferrer"&gt;https://pokeapi.co/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ElephantSQL: &lt;a href="https://www.elephantsql.com/" rel="noopener noreferrer"&gt;https://www.elephantsql.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;JSON Web Token: &lt;a href="https://jwt.io/" rel="noopener noreferrer"&gt;https://jwt.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;bcrypt for NodeJs: &lt;a href="https://www.npmjs.com/package/bcrypt" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/bcrypt&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>node</category>
      <category>react</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How to Setup Your Business Email with Amazon WorkMail and Gmail</title>
      <dc:creator>Ulzahk</dc:creator>
      <pubDate>Fri, 19 Mar 2021 03:50:46 +0000</pubDate>
      <link>https://dev.to/ulzahk/how-to-setup-your-business-email-with-amazon-workmail-and-gmail-3m64</link>
      <guid>https://dev.to/ulzahk/how-to-setup-your-business-email-with-amazon-workmail-and-gmail-3m64</guid>
      <description>&lt;p&gt;Have you had this situation? You are ready to create your digital profile, you thought a lot about what name to use for your email account but when you try to create it somebody has already taken it. You try again on another email platform and again it was taken.&lt;/p&gt;

&lt;p&gt;One of the best solutions for this problem is to create a business email and associate it with your regular email, so everytime someone writes an email to your business email, it reaches your regular email inbox section. &lt;/p&gt;

&lt;p&gt;So how can you do that? In this article I’m going to teach you step by step how you can do that with Amazon WorkMail.&lt;/p&gt;

&lt;p&gt;Amazon WorkMail is a service that helps you manage all your incoming messages to a specific business email, also it helps you organize the emails of all your coworkers that use email with the same domain and define a storage space for each one. Following I leave some features of this service:&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon WorkMail’s Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Free trial for 30 days&lt;/li&gt;
&lt;li&gt;Integration with others Amazon Web Services&lt;/li&gt;
&lt;li&gt;Email flow rules with spam and virus protection&lt;/li&gt;
&lt;li&gt;50 GB Storage per user&lt;/li&gt;
&lt;li&gt;Monthly cost per user: 4,00 USD&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Requirements to complete the guide
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AWS Account&lt;/li&gt;
&lt;li&gt;Domain Name&lt;/li&gt;
&lt;li&gt;Gmail Account&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Route 53 Association
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;To begin we are going to login in our AWS root account or an IAM account with permission for the services Route 53 and Amazon WorkMail&lt;/li&gt;
&lt;li&gt;Go to Route 53 and click Created hosted zone&lt;/li&gt;
&lt;li&gt;In this section we put our domain,  in my case I’m going to use ulzahk.com. Then we click create hosted zone&lt;/li&gt;
&lt;li&gt;The system is going to create two records an NS type and SOA type:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuu03h97bf3f49umm8i2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuu03h97bf3f49umm8i2p.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now we go to our domain provider platform and search for the Nameserver section&lt;/li&gt;
&lt;li&gt;Write all the record values that were created in the NS type record&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswcd6q6x182lwqlgw4io.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswcd6q6x182lwqlgw4io.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon WorkMail Group Creation
&lt;/h2&gt;

&lt;p&gt;1.Now that we have our DNS configured, lets go to Amazon WorkMail service&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Here you are going to create an organization. Choose existing Route 53 domain &amp;gt; your domain and a Alias for your organization:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7fjm7xc27twn97fxgl6x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7fjm7xc27twn97fxgl6x.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wait until your organization is all setup, then enter by clicking the card’s name&lt;/li&gt;
&lt;li&gt;Create a user and choose the email that you wanted. In my case I’m going to use &lt;a href="mailto:francisco@ulzahk.com"&gt;francisco@ulzahk.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fugt36n441gbih0x5cx4a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fugt36n441gbih0x5cx4a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now we can receive emails in this direction, to check the email we need to enter the Amazon WorkMail Space of our organization.&lt;/li&gt;
&lt;li&gt;We go to organization settings and click the link web application:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frze0ne1qztqdg2irn0hi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frze0ne1qztqdg2irn0hi.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It takes you to a login form where you use your username and password to enter to your Amazon WorkMail Space&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjunenf2h1rabch90f8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjunenf2h1rabch90f8z.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Email Forwarding&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now we are going to integrate this email with our gmail account to manage everything in the last one.&lt;/li&gt;
&lt;li&gt;We go to the settings section in the top right corner with a gear icon. Then select email rules and new.&lt;/li&gt;
&lt;li&gt;Create a rule with this information

&lt;ol&gt;
&lt;li&gt;When the message is sent to &lt;/li&gt;
&lt;li&gt;Then Redirect the message to … &lt;/li&gt;
&lt;li&gt;Click Ok and Click Save Changes Button&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1r51nd8sllnhcx2c4vb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1r51nd8sllnhcx2c4vb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;With this you can now receive emails from your Amazon WorkMail in your Gmail Account&lt;/li&gt;
&lt;li&gt;For the final part we are going to our google account, then go to settings &amp;gt; all settings &amp;gt; Tab Account and Imports and click Add another email address in Send email as section&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj89mn2sdj0wdh4rlabz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj89mn2sdj0wdh4rlabz4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put your Amazon Work Mail Email and click next&lt;/li&gt;
&lt;li&gt;Now use this guidelines:

&lt;ol&gt;
&lt;li&gt;SMTP Server: smtp.mail..awsapps.com&lt;/li&gt;
&lt;li&gt;Username: &lt;/li&gt;
&lt;li&gt;Password: &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftkujwk2qoy3nzbt58ga2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftkujwk2qoy3nzbt58ga2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click add account and for the email to arrive. &lt;/li&gt;
&lt;li&gt;Refresh the tab and now you can send emails with your business email&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pp6nlmfpdgflemgu0hj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pp6nlmfpdgflemgu0hj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you liked the teaching process I use in this article, I recommend you to checkout the way I work in these articles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/portfolio-project-francisco-javier-suarez-verdugo/" rel="noopener noreferrer"&gt;Portfolio Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/single-page-application-basic-blog-system-suarez-verdugo/" rel="noopener noreferrer"&gt;Single Page Application: Basic Blog System&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Amazon WorkMail Documentation: &lt;a href="https://docs.aws.amazon.com/workmail/index.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/workmail/index.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Gmail for Developers IMAP: &lt;a href="https://developers.google.com/gmail/imap/imap-smtp" rel="noopener noreferrer"&gt;https://developers.google.com/gmail/imap/imap-smtp
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Domain platform used: &lt;a href="https://www.namecheap.com/" rel="noopener noreferrer"&gt;https://www.namecheap.com/
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
    </item>
  </channel>
</rss>
