W dzisiejszym wpisie przedstawię sposób instalacji klasy phpMailer we frameworku Kohana (3).
Zacznę od przedstawienia w/w klasy:
Phpmailer jest bardzo prosty w obsłudze do wysyłania wiadomości z tej klasy należy pierw pobrać ją z oficjalnej strony. następnie należy ją rozpakować w miejscu z którego będziemy korzystać ze skryptu wysyłającego wiadomości.
Zgodnie z powyższym opisem pobieramy phpMailera z oficjalnej strony projektu i wypakowujemy go do folderu application/vendor/phpmailer. Jeśli nie posiadasz folderu vendor musisz go stworzyć.
Tworzymy model
Pracę zaczniemy od stworzenia modelu, który będzie przygotowywał klasę do pracy. Oszczędzi nam to czasu i sprawi, że nasz kod będzie czytelny.
Stwórz plik o nazwie mailer.php w application/classes/model i wklej do niego poniższą klasę.
<?php defined('SYSPATH') OR die('No direct access allowed.');
class Model_Mailer extends Model{
public static function send($to, $subject, $message, $fromname = NULL, $from = NULL){
require_once Kohana::find_file('vendor', 'phpmailer/class.phpmailer');
$body = $message; //definicja zmiennej z wiadomością
$body = preg_replace('/\\\\/','', $body); //Strip backslashes
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->CharSet = "UTF-8"; //wymuszanie kodowania UTF-8
$mail->SMTPAuth = true; //włączanie autoryzacji SMTP
$mail->Host = "adres.serwera.pocztowego.pl";
$mail->Port = 587; // port serwera SMTP (domyślnie 25)
$mail->Username = "login";
$mail->Password = "hasło";
// tutaj prosta instrukcja warunkowa sprawdzająca, czy wpisailśmy adres nadawcy.
// jeśli adres nadawcy jest pusty uzupełnia go o standardowy jaki zdefiniowaliśmy poniżej.
if($from === NULL){
$mail->From = 'listonosz@naszadomena.pl';
}else{
$mail->From = $from;
}
// kolejna instrukcja działająca tak samo jak w/w lecz tu sprawdzane jest pole FromName
// czyli nazwa nadawcy wyświetlana w nagłówku email.
if($fromname === NULL){
$mail->FromName = 'NASZA STRONA';
}else{
$mail->FromName = $fromname;
}
$mail->Subject = $subject;
$mail->WordWrap = 50; //prawdopodobnie zawijanie wierszy
$mail->MsgHTML($body); //ustalanie wiadomości HTML ($zmienna)
$mail->IsHTML(true); //włączanie obsługi wiadomości HTML
$mail->AddAddress($to);
//$mail->AddBCC('ukryty@adres.pl'); //tutaj ukryty adres email jako kopia BCC
if($mail->Send()){
return true;
}else{
return false;
}
}
}
Jak widzimy powyżej, ważnym aspektem działania tej klasy jest jej „wywołanie” z pliku poprzez funkcję Kohana::find_file oraz require_once.
require_once Kohana::find_file('vendor', 'phpmailer/class.phpmailer');
Tworzymy kontroler „kontakt”
Teraz przedstawię sposób na napisanie kontrolera kontaktu, użyłem wielu technik z poprzedniego wpisu, tj. walidacja formularza, wysyłanie komunikatów do widoku.
Oto kod naszego kontrolera (application/classes/controller/kontakt.php):
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Kontakt extends Controller_Template {
var $template;
public function action_index(){
//wczytanie widoku application/views/forms/kontakt
$this->template = View::factory('forms/kontakt');
$contact = new Model_Mailer; //inicjacja modelu
if($_POST){
//inicjacja klasy walidacji i sprawdzenie formularza
$walidacja = new Validate($_POST);
$walidacja->rule('names', 'not_empty')
->rule('email', 'not_empty')
->rule('email', 'email')
->rule('subject', 'not_empty')
->rule('message', 'not_empty');
if($walidacja->check()){
//przypisanie zmiennych po poprawnej walidacji
$adresat = 'twoj@email.pl';
$temat = $_POST['subject'];
$message = $_POST['message'];
$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($ip);
$data = date('d-m-Y H:i:s');
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$fromname = $_POST['names'];
$fromemail = $_POST['email'];
$wiadomosc = "$message<br /><br /><hr /><strong>Typ wiadomości:</strong> $temat<br /><strong>Adres IP:</strong> $ip<br /><strong>Host:</strong> $host<br /><strong>Data wysłania:</strong> $data<br /><strong>User agent:</strong> $user_agent";
//jeśli model->wyślij to wyślij do widoku wiadomość pozytywną
if($contact->send($adresat, $temat, $wiadomosc, $fromname, $fromemail)){
$this->template->message = 'Wiadomość wysłana!';
}else{ //jeśli się nie udało, wyślij do modelu wiadomość negatywną.
$this->template->warning = 'Nie wysłano wiadomości! Błąd.';
}
}else{ //jeśli walidacja się nie udała to wyślij monit do widoku.
$this->template->warning = 'Uzupełnij poprawnie formularz!';
}
}
}
}
Czas na widok
Ostatnim krokiem jest stworzenie widoku w application/views/forms/kontakt.php i wpisaniem do niego poniższego kodu, który możesz dostosować indywidualnie do własnej strony.
<h1>Kontakt</h1>
<?php
if(isset($message)){
echo '<h3 class="success">'.$message.'</h3>'."\n";
}elseif(isset($warning)){
echo '<h3 class="fail">'.$warning.'</h3>'."\n";
}
?>
<table border="0" cellpadding="0" cellspacing="5" width="510" class="formtable">
<?php echo Form::open()."\n"; ?>
<tr>
<td>Imię i nazwisko:<span style="color: #ff0000;">*</span></td><td><?php echo Form::input('names', NULL, array('class'=>'text')) ?></td>
</tr>
<tr>
<td>Adres e-mail:<span style="color: #ff0000;">*</span></td><td><?php echo Form::input('email', NULL, array('class'=>'text')) ?></td>
</tr>
<tr>
<td>Temat:<span style="color: #ff0000;">*</span></td><td><?php echo Form::input('subject', NULL, array('class'=>'text')) ?></td>
</tr>
<tr>
<td>Treść:<span style="color: #ff0000;">*</span></td><td><?php echo Form::textarea('message', NULL, array('class'=>'text')) ?></td>
</tr>
<tr>
<td></td>
<td><?php echo Form::submit('send', 'Wyślij', NULL); ?></td>
</tr>
<?php echo Form::close(); ?>
</table>
To na tyle. Całości nie testowałem tak więc w razie powstałych problemów proszę o komentarz :)
Proszę też o sugestkie na jakie tematy pisać o Kohana Framework 3









Twitter Updates
Written by sbl
Topics: Kohana 3, Programowanie