Go Dilinde Concurrency

2,183 More

Projedeki Git Dosyaları Nasıl Silinir?

1 7,664 More

yTheme

4 2,658 More

Sunucu Güvenliği | SSH (Secure Shell) Kullanımı

2 2,108 More

Truemag

  • PHP
  • Golang
  • Laravel
  • Linux
  • SQL
  • SEO
  • WordPress
  • Diğer
    • Yazılım
    • Javascript
    • Css/XHtml/W3C
    • Genel
    • Tanıtım
    • Ajax
  • Home
  • ANASAYFA
  • HAKKIMDA
  • SPONSORLUK
  • ARŞİV
  • İLETİŞİM
  • BENİMLE ÇALIŞMAK İSTER MİSİNİZ?

Laravel İletişim Formu ile Eposta Gönderme

laravel iletişim formu

Laravel iletişim formu ile eposta göndermenin nasıl yapılacağını anlattığım bu yazı ile projelerinizde ek bir paket kurmadan Laravel’in sağlamış olduğu mevcut imkânlarla rahatlıkla bir iletişim formu oluşturulabildiğini görebilirsiniz.

Not: Bu yazımda her ne kadar iletişim formunun örnek uygulama olarak ele almış olsam da esas meselenin Laravel ile nasıl mail (eposta) gönderilir sorusuna cevap aramak olduğunu da söylemem lazım.

Laravel iletişim formu

Laravel iletişim formu için kullanacağımız eposta işlemleri için ücretsiz ve zengin “SwiftMailer” kütüphanesini kullanmaktadır. Bu kütüphane sayesinde başımız ağrımadan rahatlıkla eposta gönderme işlemlerini gerçekleştirebiliriz. Bununla birlikte eposta şablonları normal view dosyaları şeklinde yüklenir. Böylece Blade template sistemini eposta şablonlarımız için kolayca kullanabilir, bu view dosyalarına istediğimiz veriyi yükleyebiliriz.

Uygulamamızda contact.blade.php dosyasında bulunan iletişim formu doldurularak gönderildiğinde, route dosyasında (web.php) iletişim formundaki veriler alınacak, contacttext.blade.php dosyası ile birleştirilecek ve birleştirilmiş veriler belirtilen eposta adresine HTML formatında gönderilecektir.

Laravel eposta gönderme

Öncelikle Laravel kurulumunda bulunan .env dosyasında eposta sürücümüz için gerekli ayarları yapmalıyız. Ben eposta gönderirken Gmail altyapısını kullandığım için başlangıçta Gmail’e girerek uygulama için gerekli parolayı oluşturuyoruz ve .env dosyasının içeriğini aşağıdaki şekilde güncelliyoruz.

1
2
3
4
5
6
MAIL_DRIVER = smtp
MAIL_HOST = smtp.gmail.com
MAIL_PORT = 587
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-application-specific-password
MAIL_ENCRYPTION = tls

View dosyasının oluşturulması

Burada vereceğim örnekte epostaları HTML şeklinde göndereceğiz. Bunun için 2 view dosyasına ihtiyacımız var. Bunlardan ilki iletişim formunu içinde barındıran contact.blade.php, diğeri ise formdan gelen bilgilerle birlikte gönderilecek olan HTML kodlarını içeren contacttext.blade.php dosyasıdır.

Konuyu basit bir şekilde anlatmak istediğim için blade template sisteminin detaylarına inmeden, CSS kodları da içinde bulunan tek sayfalık örnek iletişim formu (contact.blade.php) hazırladım. Formun görünümü ve kodları aşağıdaki gibidir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<!doctype html>
<html lang="tr">
    <head>
        <meta charset="utf-8">
        
        <title>Laravel</title>
 
        <!-- Styles -->
        <style>
            @import url(https://fonts.googleapis.com/css?family=Roboto:400,300,600,400italic);
            * {
              margin: 0;
              padding: 0;
              box-sizing: border-box;
              -webkit-box-sizing: border-box;
              -moz-box-sizing: border-box;
              -webkit-font-smoothing: antialiased;
              -moz-font-smoothing: antialiased;
              -o-font-smoothing: antialiased;
              font-smoothing: antialiased;
              text-rendering: optimizeLegibility;
            }
 
            body {
              font-family: "Roboto", Helvetica, Arial, sans-serif;
              font-weight: 100;
              font-size: 12px;
              line-height: 30px;
              color: #777;
              background: #4CAF50;
            }
 
            .container {
              max-width: 400px;
              width: 100%;
              margin: 0 auto;
              position: relative;
            }
 
            #contact input[type="text"],
            #contact input[type="email"],
            #contact input[type="tel"],
            #contact input[type="url"],
            #contact textarea,
            #contact button[type="submit"] {
              font: 400 12px/16px "Roboto", Helvetica, Arial, sans-serif;
            }
 
            #contact {
              background: #F9F9F9;
              padding: 25px;
              margin: 50px 0;
              box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
            }
 
            #contact h3 {
              display: block;
              font-size: 30px;
              font-weight: 300;
              margin-bottom: 10px;
            }
 
            #contact h4 {
              margin: 5px 0 15px;
              display: block;
              font-size: 13px;
              font-weight: 400;
            }
 
            fieldset {
              border: medium none !important;
              margin: 0 0 10px;
              min-width: 100%;
              padding: 0;
              width: 100%;
            }
 
            #contact input[type="text"],
            #contact input[type="email"],
            #contact input[type="tel"],
            #contact input[type="url"],
            #contact textarea {
              width: 100%;
              border: 1px solid #ccc;
              background: #FFF;
              margin: 0 0 5px;
              padding: 10px;
            }
 
            #contact input[type="text"]:hover,
            #contact input[type="email"]:hover,
            #contact input[type="tel"]:hover,
            #contact input[type="url"]:hover,
            #contact textarea:hover {
              -webkit-transition: border-color 0.3s ease-in-out;
              -moz-transition: border-color 0.3s ease-in-out;
              transition: border-color 0.3s ease-in-out;
              border: 1px solid #aaa;
            }
 
            #contact textarea {
              height: 100px;
              max-width: 100%;
              resize: none;
            }
 
            #contact button[type="submit"] {
              cursor: pointer;
              width: 100%;
              border: none;
              background: #4CAF50;
              color: #FFF;
              margin: 0 0 5px;
              padding: 10px;
              font-size: 15px;
            }
 
            #contact button[type="submit"]:hover {
              background: #43A047;
              -webkit-transition: background 0.3s ease-in-out;
              -moz-transition: background 0.3s ease-in-out;
              transition: background-color 0.3s ease-in-out;
            }
 
            #contact button[type="submit"]:active {
              box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.5);
            }
 
            .copyright {
              text-align: center;
            }
 
            #contact input:focus,
            #contact textarea:focus {
              outline: 0;
              border: 1px solid #aaa;
            }
 
            ::-webkit-input-placeholder {
              color: #888;
            }
 
            :-moz-placeholder {
              color: #888;
            }
 
            ::-moz-placeholder {
              color: #888;
            }
 
            :-ms-input-placeholder {
              color: #888;
            }
        </style>
    </head>
    <body>
        <div class="container">  
              <form id="contact" method="POST" action="{{ url('/send')}}" enctype="multipart/form-data">
                {{ csrf_field() }}
                <h3>Laravel İletişim Formu</h3>
                
                @if (isset($send) && $send == TRUE)
                    "<b>Mesajınız gönderildi</b>"
                @endif
                
                <h4>Bizimle irtibata geçmekten çekinmeyiniz.</h4>
                <fieldset>
                  <input placeholder="Ad Soyad" type="text" name="name" tabindex="1" required autofocus>
                </fieldset>
                <fieldset>
                  <input placeholder="Eposta Adresi" type="email" name="email" tabindex="2" required>
                </fieldset>
                <fieldset>
                  <input placeholder="Telefon" type="tel" name="phone" tabindex="3" required>
                </fieldset>
                <fieldset>
                  <input placeholder="Websiteniz" type="url" name="url" tabindex="4" required>
                </fieldset>
                <fieldset>
                  <textarea placeholder="Mesajınız..." name="messagetext" tabindex="5" required></textarea>
                </fieldset>
                <fieldset>
                  <button name="submit" type="submit" id="contact-submit" data-submit="...Sending">Gönder</button>
                </fieldset>
                <p class="copyright"><a href="https://www.yakuter.com" target="_blank" title="Yakuter">Yakuter</a></p>
              </form>
        </div>
    </body>
</html>

Form verileri ile birlikte gönderilecek olan HTML dosyamız (contacttext.blade.php) ise şu şekildedir.

1
2
3
4
5
6
7
8
9
10
<html>
<head></head>
<body>
<p><strong>Ad Soyad:</strong> {{ $name }}</p>
<p><strong>Eposta:</strong> {{ $email }}</p>
<p><strong>Telefon:</strong> {{ $phone }}</p>
<p><strong>Website:</strong> {{ $url }}</p>
<p><strong>Mesaj:</strong> {{ $messagetext }}</p>
</body>
</html>

Route dosyasının güncellenmesi

Normal şartlarda route dosyası (web.php) adı üstünde routing için kullanılır. Eposta gönderme gibi işlemler controller dosyalarında yapılır ancak yine konuyu sadeleştirmek adına tüm işlemi route dosyasında (web.php) gerçekleştireceğiz. Laravel dizinimizdeki routes/web.php dosyasını açarak aşağıdaki şekilde değiştiriyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
use Illuminate\Http\Request;
 
Route::get('/', function () {
    return view('contact');
});
 
Route::post('/send', function (Request $request ) {
 
    $data = array
     (
     'name'=>$request->name,
     'email'=>$request->email,
     'phone'=>$request->phone,
     'url'=>$request->url,
     'messagetext'=>$request->messagetext
     );
 
    Mail::send('contacttext', $data, function ($message) use ($request){
        $message->subject ('Laravel İletişim Formu!');
        $message->from ('yakuter@gmail.com', 'Erhan Yakut');
        $message->to('yakuter@gmail.com', 'Erhan Yakut');
    });
    
    return view('contact')->with('send', TRUE);
});

Dip Notlar

İletişim formumuz temel olarak bundan ibarettir. Ancak elbette ki bunu geliştirmek sizin elinizde. Yapabileceklerinize kısaca değinmek gerekirse şu şekilde sıralayabiliriz.

1. Form Validation Kullanımı

Sonuçta bir form doldurularak uygulamamız tarafından işleme alınıyor. Böyle bir durumda aşağıdaki gibi bir Form Validation kullanmak oldukça mantıklı olacaktır.

1
2
3
4
5
$this->validate($request,[
            'name' => 'required',
            'email' => 'required|email',
            'message' => 'required',
        ], $messages);

2. Diğer Eposta Seçenekleri

Yukarıdaki örnekte $message->from, $message->from gibi değişkenleri gördünüz. Bir epostanın bir çok özelliği bulunmaktadır. İşte bu özellikleri aşağıdaki değişkenler (methodlar) vasıtasıyla kullanabilirsiniz.

1
2
3
4
5
6
$message->sender('email@example.com', 'Mr. Example');
$message->returnPath('email@example.com');
$message->cc('email@example.com', 'Mr. Example');
$message->bcc('email@example.com', 'Mr. Example');
$message->replyTo('email@example.com', 'Mr. Example');
$message->priority(2);

3. Epostaya Dosya Eklemek

Epostamıza bir dosyayı dilerseniz ek (attachment) olarak, dilerseniz de gömülü (embeded) olarak ekleyebilirsiniz. Bunun için de aşağıdaki methodları kullanabilirsiniz.

1
2
$message->attach('path/to/attachment.txt');
$message->embed('path/to/attachment.jpg');

Son Sözler

Burada konuyu basit bir iletişim formu çerçevesinde kısaca anlatmaya çalıştım. Ancak amacınız bir listedeki tüm kişilere queue şeklinde ve düzenli olarak eposta göndermek gibi daha detaylı konular içeriyorsa Laravel dokümantasyonundaki Mail başlığını çalışmanızı tavsiye ederim. İyi çalışmalar…

Aug 2, 2017Erhan Yakut
Cloud Sunucu


hosting

PHP / cPanel Otomatik Sub Domain OluşturmaFizyoterapist Maaşları
You Might Also Like
 
Laravel Site Settings
 
Laravel Projelerde SEO Uygulamaları
Erhan Yakut
3 years ago 5 Comments Laravel, PHPLaravel, laravel eposta gönderme, laravel iletişim formu, laravel mail, mail gönderme6,449
Sponsorlar

sponsor

sponsor

sponsor

sponsor
Bağlantılar
  • Beyazıt Kölemen
  • Domatessuyu
  • Lezzetli Robot Tarifleri
  • Ofizzo
  • PHP Dersleri
  • Wordpress Hosting
Random Posts
Webit Kongresi Evrensel Devler Mücadalesi 2013
Bilmeseniz de Olur Bilgiler
CentOS Linux | Zip Uzantılı Dosyaları Açmak
Go ile Büyük JSON Dosyalarını Okuma
Sitenizin İstatistiğini Tutun
sdafasdf
Hakkımda

Bilişim Teknolojileri alanında içerik üretmek üzere oluşturulmuş olan Yakuter.com 2006 yılında Erhan Yakut tarafından hayata geçirilmiştir. devamını okuyun…

CLOUD SUNUCU DESTEĞİ
2006-2020 © Yakuter