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 :
What did I miss here?
Thanks
Via Active questions tagged javascript - Stack Overflow https://ift.tt/egcioSD
Comments
Post a Comment