mertjr

Başarılı
Katılım
24 Şubat 2024
Mesajlar
381
Beğeniler
205
Nodemailer kullanarak bir form oluşturdum fakat mail gönderen kişi görselde kırmızı ile çizdiğim yer orayı da formda girilen mail adresi gönderdi olarak gösteremedim bir türlü. Bunun bir yolu var mı?

Ekran görüntüsü 2024-04-30 193554.webp


Kod:
 const mailOptpions = {
 from: req.body.mail,
 to: "[email protected]",
 subject: `Staj Başvuru Formu`,
 text: `
 İsim: ${req.body.isim}
 Mail: ${req.body.mail}
 Telefon: ${req.body.telefon}
 Staj Konusu: ${req.body.stajKonusu}
 Staj Süresi: ${req.body.stajSuresi}
 Staj Dönemi: ${req.body.stajDönemi}
 CV Dosyası: ${req.body.cvDosyasi}
 Staj Dönemi ile ilgili Görüş/Mesaj: ${req.body.comment}
 `,
 };

@brkdnmz :)
 
Ha, o da olabilir evet. Ben bunu kullanmaya devam ediyorum.


Bir de PDF'ya da Excel okuma özelliği yok mu Nodemailer'ın?
 
Kullanıcının tarayıcıdan yüklediği dosyayı, sunucuya yollayacağınız istekle beraber gönderebilirsiniz. Bunu sormuş olabileceğinizi düşündüm.
Kullanıcı yükleyecek evet.

@mertjr, req.body'yi loglamanız isteniyor aslında. : )

Kontrol ederiz bir, belki işler yolunda gitmemiştir ve boş bir objeden ibarettir.
1714504065186.webp

Her şey yolunda gözüküyorken gelen mailde neden böyle gözükmüyor anlamış değilim. :D
 
Son düzenleme:
E-postada gözüken "undefined"lardan dolayı boş bir obje olduğunu düşünmüştüm req.body'nin. Direkt bu logladığınız objeyi kullanmanız durumunda öyle bir görüntü beklemezdim.

E-postayı yollayan kodun tümünü paylaşma şansınız var mı?

[CODE lang="html" title="form"] <div class="row">
<div id="form-tagline" class="col-md-4">
<div class="form-tagline">
<i class="fa fa-envelope fa-5x"></i>
<h2>Staj Başvuru Formu</h2>
</div>
</div>

<div id="form-content" class="col-md-8">
<form class="contact-form" action="">
<div class="row form-group">
<div class="col-sm-3">
<input type="hidden" />
<label id="name-label" class="control-label" for="isim"
</div>

<div class="input-group col-sm-9">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon-isim"
</div>
<input
id="isim"
type="text"
class="form-control"
placeholder="Adınız, Soyadınız"
name="isim"
required
/>
</div>
</div>

<div class="form-group row">
<div class="col-sm-3">
<label id="email-label" class="control-label" for="email"
</div>

<div class="input-group col-sm-9">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon-email"
<i class="fa fa-envelope"></i
</span>
</div>
<input
type="email"
class="form-control"
id="email"
placeholder="email Adresiniz"
name="email"
pattern="^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$"
required
/>
</div>
</div>
<div class="form-group row">
<div class="col-sm-3">
<label id="number-label" class="control-label" for="telefon"
</div>
<div class="input-group col-sm-9">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon-telefon"
<i class="fa fa-phone"></i
</span>
</div>
<input
type="text"
class="form-control"
id="telefon"
placeholder="Telefon Numaranızı Girin"
name="telefon"
required
/>
</div>
</div>

<div class="form-group row">
<div class="col-sm-3">
<label class="control-label" for="stajKonusu"
</div>
<div class="input-group col-sm-9">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon-stajKonusu"
<i class="fa fa-briefcase"></i
</span>
</div>
<input
type="text"
class="form-control"
id="stajKonusu"
placeholder="Staj Konusunu Girin"
name="stajKonusu"
required
/>
</div>
</div>

<div class="form-group row">
<div class="col-sm-3">
<label class="control-label" for="stajSuresi"
</div>
<div class="input-group col-sm-9">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon-stajSuresi"
<i class="fa fa-clock"></i
</span>
</div>
<input
type="text"
class="form-control"
id="stajSuresi"
placeholder="Staj Süresini Girin"
name="stajSuresi"
required
/>
</div>
</div>
<div class="form-group row">
<div class="col-sm-3">
<label class="control-label" for="stajDonemi"
</div>
<div class="input-group col-sm-9">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon-stajDonemi"
<i class="fa fa-calendar"></i
</span>
</div>
<input
type="text"
class="form-control"
id="stajDonemi"
placeholder="Staj Dönemini Girin"
name="stajDonemi"
required
/>
</div>
</div>

<hr />

<div class="form-group row">
<div class="col-sm-3">
<label class="control-label" for="cvDosyasi"
</div>
<div class="col-sm-9">
<input
type="file"
class="form-control"
id="cvDosyasi"
name="cvDosyasi"
accept=".pdf"
required
/>
<small class="form-text text-muted">Sadece PDF formatı</small>
</div>
</div>

<div class="form-group row">
<div class="col-sm-3">
<label class="control-label" for="comment"
Staj Dönemi ile ilgili Görüş/Mesaj:</label
</div>

<div class="input-group col-sm-9">
<div class="input-group-prepend">
<span class="input-group-text" id="basic-addon-email"
<i class="fa fa-comment"></i
</span>
</div>
<textarea class="form-control" rows="5" id="comment"></textarea>
</div>
</div>

<div class="form-group row">
<div class="col-sm-12 submit-button">
<button
type="submit"
id="submit"
class="btn btn-default"
aria-pressed="true"
Başvuruyu Gönder
</button>
</div>
</div>
</form>
</div>
</div>[/CODE]

Kod:
 <script>
 const contactform = document.querySelector(".contact-form");
 let isim = document.getElementById("isim");
 let email = document.getElementById("email");
 let telefon = document.getElementById("telefon");
 let stajKonusu = document.getElementById("stajKonusu");
 let stajSuresi = document.getElementById("stajSuresi");
 let stajDonemi = document.getElementById("stajDonemi");
 let cvDosyasi = document.getElementById("cvDosyasi");
 let comment = document.getElementById("comment");

 contactform.addEventListener("submit", (e) => {
 e.preventDefault();

 let formData = {
 isim: isim.value,
 email: email.value,
 telefon: telefon.value,
 stajKonusu: stajKonusu.value,
 stajSuresi: stajSuresi.value,
 stajDonemi: stajDonemi.value,
 cvDosyasi: cvDosyasi.value,
 comment: comment.value,
 };

 let xhr = new XMLHttpRequest();
 xhr.open("POST", "/");
 xhr.setRequestHeader("content-type", "application/json");
 xhr.onload = function () {
 console.log(xhr.responseText);
 if (xhr.responseText == "success") {
 alert("email Gitti");
 isim.value = "";
 email.value = "";
 telefon.value = "";
 stajKonusu.value = "";
 stajSuresi.value = "";
 stajDonemi.value = "";
 cvDosyasi.value = "";
 comment.value = "";
 } else {
 alert("wrong");
 }
 };
 xhr.send(JSON.stringify(formData));
 });
 </script>

const express = require("express");
const app = express();
const nodemailer = require("nodemailer");

const PORT = process.env.PORT || 5000;

// Middleware
app.use(express.static("public"));
app.use(express.json());

app.get("/", (req, res) => {
 res.sendFile(__dirname + "/bize-basvurun/staj-basvuru.html");
});

app.post("/", (req, res) => {
 console.log(req.body);
 const transporter = nodemailer.createTransport({
 service: "gmail",
 auth: {
 user: "..",
 pass: "..",
 },
 });

 const mailOptions = {
 from: req.body.email,
 to: "[email protected]",
 subject: `Staj Başvuru Formu`,
 text: `
 İsim: ${req.body.isim}
 Mail: ${req.body.email}
 Telefon: ${req.body.telefon}
 Staj Konusu: ${req.body.stajKonusu}
 Staj Süresi: ${req.body.stajSuresi}
 Staj Dönemi: ${req.body.stajDönemi}
 CV Dosyası: ${req.body.cvDosyasi}
 Staj Dönemi ile ilgili Görüş/Mesaj: ${req.body.comment}
 `,
 };

 transporter.sendMail(mailOptions, (error, info) => {
 if (error) {
 console.log(error);
 res.send("error");
 } else {
 console.log("Email sent: " + info.response);
 res.send("success");
 }
 });
});

app.listen(PORT, () => {
 console.log(`server running on port ${PORT}`);
});
 
Ah, bir detayı gözden kaçırmışım: Gmail SMTP'sini kullanırken gönderenin adresi, sizin adresiniz yani şu createTransport'taki olmak zorunda. Siz farklı bir adres yazmaya çalışsanız bile nafile.

Şurada dendiğine göre Google, gönderen adresinin üzerine yazıyormuş sizin adresinizi:


The short answer - you can't.

Google rewrites the From and Reply-To headers in messages you send via it's SMTP service to values which relate to your gmail account.

The SMTP feature of gmail isn't intended to be an open or relay service. If it allowed any values for the From header, it would significantly dilute Google's standing with spam services, as there would be no way to verify the credentials of the sender.

Tabii ki bu durum düşününce çok normal çünkü gönderen adresin bilgilerine sahip olmanız gerekirdi. Bir şekilde SMTP hesabı üzerinden farklı bir adres tanımlamak mümkün gibi gözüküyor, biraz araştırdım da. Yine de bu konuya hakim olmadığım için pek bir yönlendirme yapamayacağım.




Burada galiba diğer yerlerin hepsini boş bırakıp sadece gönderen adresini değiştirmeyi denemişsiniz. Diğer bilgilerin undefined olarak görünmesi için bir neden göremedim.
 
Ah, bir detayı gözden kaçırmışım: Gmail SMTP'sini kullanırken gönderenin adresi, sizin adresiniz yani şu createTransport'taki olmak zorunda. Siz farklı bir adres yazmaya çalışsanız bile nafile.

Şurada dendiğine göre Google, gönderen adresinin üzerine yazıyormuş sizin adresinizi:


Tabii ki bu durum düşününce çok normal çünkü gönderen adresin bilgilerine sahip olmanız gerekirdi. Bir şekilde SMTP hesabı üzerinden farklı bir adres tanımlamak mümkün gibi gözüküyor, biraz araştırdım da. Yine de bu konuya hakim olmadığım için pek bir yönlendirme yapamayacağım.



Burada galiba diğer yerlerin hepsini boş bırakıp sadece gönderen adresini değiştirmeyi denemişsiniz. Diğer bilgilerin undefined olarak görünmesi için bir neden göremedim.

Orada hiçbir şey yapmamama rağmen kendi kendine 2 3 tane mail geldi arka arkaya undefined olarak onu bende anlamadım :D

Şirket için yaptığım bir form olduğu için sorun olur mu orda benim adresim gözükmesi ondan emin olamadım. SMTP'de değişmiyor ise kurumsal firmalara iş yapanlar ne kullanıyor SMTP yerine?
 
SMTP'de değişmiyor ise kurumsal firmalara iş yapanlar ne kullanıyor SMTP yerine?

Terimi pek doğru kullanmayıp kafanızı karıştırmış olabilirim. SMTP, e-posta transfer protokolünün isminin kısaltması. E-posta gönderilirken SMTP kullanılıyor yani her türlü (?).

Alternatif yöntemler hakkında yeterince bilgi sahibi değilim maalesef. :/ Umarım başkaları yardımcı olabilir.

@mertjr, tabii şunu yapabilirsiniz: Uygulamanıza has bir Gmail hesabı açarsınız ve SMTP hesabı olarak onu kullanırsınız. Ne kadar profesyonel olacağı konusunda yorumum yok.
 
Terimi pek doğru kullanmayıp kafanızı karıştırmış olabilirim. SMTP, e-posta transfer protokolünün isminin kısaltması. E-posta gönderilirken SMTP kullanılıyor yani her türlü (?).

Alternatif yöntemler hakkında yeterince bilgi sahibi değilim maalesef. :/ Umarım başkaları yardımcı olabilir.

@mertjr, tabii şunu yapabilirsiniz: Uygulamanıza has bir Gmail hesabı açarsınız ve SMTP hesabı olarak onu kullanırsınız. Ne kadar profesyonel olacağı konusunda yorumum yok.

Uzun uğraşlar sonucu bir yol buldum. :)