Skip to main content

Why is the sender of the email the same email that should be the receiver?

I'm doing a contact form for my small training project. Email is being received, but it doesn't seem right. It appears that I'm sending it to myself from the same email account

I'm using nodemailer and Angular.

This is the sendEmail function :

async function sendEmail(user,callback){
  const transporter = nodemailer.createTransport({
    host: "smtp.gmail.com",
    port:587,
    service: `gmail`,
    auth:{
      async function sendEmail(data,callback){


const transporter = nodemailer.createTransport({
    host: "smtp.gmail.com",
    port:587,
    service: `gmail`,
    auth:{
        user : `youremailwithoutprovider`,
        pass: `your 3rd party app Google password`
    }
})

 const mailOptions = {
  sender: data.email,
  to: `essentialoilsnodemailer@gmail.com`,
  subject: data.subject,
  query: data.query,
  html: `
  <h2>From:</h2>
  <div>${data.email}</div>
  <h2>Subject:</h2>
  <div>${ data.subject}</div>
  <h2>Query:</h2>
  <div>${ data.query}</div>
  `
}

let info = await transporter.sendMail(mailOptions)

callback(info)
}

module.exports = {
  sendEmail
}
     

This is the controller in the server:

emailController.post(`/contact-us`, (req,res) => {
    console.log(`request came`)
    let user = req.body
   

    try {
        sendEmail(user,callback => {
      
        })
    } catch (error) {
        res.status(400).json({error:error.message})
    }

    res.end()
})

This is the whole contact-us component :

import { Component } from '@angular/core';
import { FormBuilder, Validators } from '@angular/forms';
import { Router } from '@angular/router';
import { ContactUsService } from './contact-us.service';

@Component({
  selector: 'app-contact-us',
  templateUrl: './contact-us.component.html',
  styleUrls: ['./contact-us.component.css']
})
export class ContactUsComponent {
  errors: any;
  constructor(private fb: FormBuilder,private emailService: ContactUsService, private router: Router ){}

  contactUs = this.fb.group({
    name: [``,[Validators.required, Validators.minLength(5)]],
    subject: [``, [Validators.required, Validators.maxLength(20)]],
    email: [``,[Validators.email, Validators.required]],
    query: [``, [Validators.required, Validators.minLength(15)]]
  })  

  sendEmail(){
  let user = {
    name : this.contactUs.get(`name`)?.value,
    email : this.contactUs.get(`email`)?.value,
    subject : this.contactUs.get(`subject`)?.value,
    query:  this.contactUs.get(`query`)?.value,
  } 
  this.emailService.sendEmail(user).subscribe({
    

      next: () => this.router.navigate([`/`]),
      error:(err)=>   {
        this.errors = err.error?.error
      }

    })
  
    this.contactUs.reset()
  
  }
}

This is the service in Angular :

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { IQuery } from '../interfaces/query';

const API_CONTACT_US_EMAIL = `http://localhost:3000/contact-us`

@Injectable({
  providedIn: 'root'
})
export class ContactUsService {

  query : null | IQuery | undefined
  constructor(private http: HttpClient, private router: Router) { }

  sendEmail(data: {}){
    return this.http.post<IQuery>(`${API_CONTACT_US_EMAIL}`, data)
  }
}

This is all working, form is being filled out properly, email is received, just the sender is wrong in the gmail - it is the same email address.

You can see that I've used console.log a few times on the server, from them it seems like the proper data is being picked up, but something happens in the nodemailer I think.

request came
 Email sent

And this is how it looks in the gmail : Screenshot

What did I miss here?

Thanks

Via Active questions tagged javascript - Stack Overflow https://ift.tt/egcioSD

Comments