TUTORIAL: envoi d'email via SMTP
- Bogey
- Bogey


- Inscription: Juil 14, 2005
- Messages: 8212
- Loc: USA
- Status: Offline
1.0 Introduction
Il ya de nombreux cas, lorsque vous (en tant que propriétaire du site web master /) à envoyer à vos utilisateurs un e-mail, ou laisser les utilisateurs envoyer un e-mail d'autres utilisateurs. Évidemment, vous voulez coder certaines autorisations sur cette question et permettre aux utilisateurs de désactiver les autres utilisateurs à envoyer des emails à eux, sinon il pourrait devenir assez laid.
Le principal objectif de ce tutoriel est de briser le code existant en petits morceaux et expliquer ce que chaque ligne ne, alors quand vous utilisez le code, vous seriez capable de l'utiliser et de bien comprendre ce qu'il le fasse.
1.1 Avis du droit d'auteur
Cette classe n'est pas mon original, donc je ne possède pas cette classe. Je l'ai eu comme une simple page PHP et l'a converti en une classe et édité un peu...mais je n'ai pas le créer à partir de zéro.
2,0 serveurs SMTP
La plupart des hôtes de fournir un serveur SMTP (et serveur POP) qui est disponible pour vous à utiliser pour ce but. Dans la plupart des cas, le lien vers le serveur SMTP devrait ressembler à: smtp.myhost.com .
Dans la plupart des cas, un port SMTP normal serait de 25 en un port sécurisé pour SMTP serait 465. Si ce n'est pas ces ports alors l'hôte doit vous dire quels sont les ports les ports SMTP. (Ils vont vous dire les ports, même s'ils sont ces ports).
2.1 Alternatives SMTP
Si, pour quelque raison que votre hébergeur ne vous fournit pas un serveur SMTP pour vous à utiliser, il existe quelques alternatives là-bas que vous pouvez utiliser. Le premier qui me vient à l'esprit est gmail.
Gmail vous permet d'utiliser leur serveur SMTP pour envoyer des messages e-mail gratuitement et sans aucun tracas. Par cela, je veux dire que vous n'avez pas à aller à gmail et permettre SMTP ou quelque chose comme ça...son toujours là tout ce que vous devez faire est de remplir les informations dans le script et cela fonctionne. Voici les informations qui vous permettent d'utiliser leur serveur SMTP:
serveur SMTP : Smtp.gmail.com
Port : 587
Nom d'utilisateur : {Votre e-mail gmail (e. i: myname@gmail.com )}
Mot de passe : {Votre mot de passe pour votre e-mail}
Il n'ya pas que Gmail que vous fournissez avec un serveur SMTP. Une, par exemple, est SMTP.com , Mais comme vous pouvez le voir, c'est un peu plus cher que d'autres gmail.com est.
3. 0 La classe d'initiation
Ive voulait une simple classe pour me permettre d'avoir les utilisateurs envoient aux utilisateurs, envoyez-moi pour les utilisateurs et les utilisateurs qui envoient de moi...J'ai trouvé une fonction qui a limité le service de messagerie pour m'envoyer aux utilisateurs et c'est tout. Il est évident qu'il doit y avoir quelque chose que j'avais à faire, à augmenter les capacités de cette fonction.
La façon dont je voulais utiliser cette fonction est:
PHP Code: [ Select ]
new mail($to, $subject, $message)
Un one-liner, à mon avis, est vraiment un gros plus quand il s'agit de ce...une seule ligne qui renvoie vrai si le message a été envoyé ou faux si le message n'a pas pu être envoyé.
Cela me permet de conclure que l'une chemise avec un if () déclaration et le retour à l'utilisateur l'état de leur message.
3.1 La déclaration des variables
Il ya quelques variables déclarées dans la classe pour faire de cette classe utilisable:
PHP Code: [ Select ]
class mail {
private $smtpServer = 'smtp.gmail.com';
private $port = '587';
private $timeout = 30;
private $username = 'myname@gmail.com';
private $password = 'mypassword';
private $username_email = 'myreceivingemail@gmail.com';
private $newline = "\r\n";
private $localdomain = 'http://www.mysite.com';
private $charset = 'windows-1251';
private $contentTransferEncoding = false;
// Do not change anything below
private $smtpConnect = false;
private $to = false;
private $subject = false;
private $message = false;
private $headers = false;
private $logArray = array(); // Array response message for debug
private $Error = '';
private $from = false;
}
private $smtpServer = 'smtp.gmail.com';
private $port = '587';
private $timeout = 30;
private $username = 'myname@gmail.com';
private $password = 'mypassword';
private $username_email = 'myreceivingemail@gmail.com';
private $newline = "\r\n";
private $localdomain = 'http://www.mysite.com';
private $charset = 'windows-1251';
private $contentTransferEncoding = false;
// Do not change anything below
private $smtpConnect = false;
private $to = false;
private $subject = false;
private $message = false;
private $headers = false;
private $logArray = array(); // Array response message for debug
private $Error = '';
private $from = false;
}
- class mail {
- private $smtpServer = 'smtp.gmail.com';
- private $port = '587';
- private $timeout = 30;
- private $username = 'myname@gmail.com';
- private $password = 'mypassword';
- private $username_email = 'myreceivingemail@gmail.com';
- private $newline = "\r\n";
- private $localdomain = 'http://www.mysite.com';
- private $charset = 'windows-1251';
- private $contentTransferEncoding = false;
- // Do not change anything below
- private $smtpConnect = false;
- private $to = false;
- private $subject = false;
- private $message = false;
- private $headers = false;
- private $logArray = array(); // Array response message for debug
- private $Error = '';
- private $from = false;
- }
Voici les variables ventilées.
- SMTPServer
- Le serveur SMTP que vous seriez connexion et l'utilisation d'envoyer des messages
- port
- Le port que vous utiliserez pour vous connecter au serveur SMTP
- timeout
- longueur de temps (en secondes) que le script essaierait de se connecter avant de décider qu'il ne se connecte pas
- nom d'utilisateur
- L'e-mail gmail (à savoir: monnom @ gmail. com ) À laquelle le serveur SMTP est lié à
- Mot de passe
- Le mot de passe pour que le courrier électronique pour permettre l'utilisation du serveur SMTP
- username_email
- C'est l'e-mail qui recevra les messages de l'utilisateur...n'a pas à être à partir de Gmail.
- retour à la ligne
- C'est ainsi que le script fera des sauts de ligne dans les messages d'erreur et de débogage.
- localdomain
- Il s'agit d'un lien vers votre site.
- charset
- Le jeu de caractères (encodage je crois) qui est utilisé dans ce message
- contentTransferEncoding
- Si vrai, il serait mis dans la tête que le contenu est codé (je crois...ne pense pas que ce serait effectivement coder le contenu
- // Connect to server
- if(!$this->Connect2Server()) {
- // Display error message
- echo '<pre>'.trim($this->Error).'</pre>'.$this->newline.'<!-- '.$this->newline;
- print_r($this->logArray);
- echo $this->newline.'-->'.$this->newline;
- return false;
- }
- return true;
- }
- public function __construct($to, $subject, $message, $to_admin) {
- $this->to_admin = $to_admin;
- $this->to = (($this->to_admin === false) ? $this->username_email : $to );
- $this->from = (($this->to_admin === false) ? $to : $this->username_email );
- $this->subject = &$subject;
- $this->message = &$message;
- // Connect to server
- if(!$this->Connect2Server()) {
- // Display error message
- echo '<pre>'.trim($this->Error).'</pre>'.$this->newline.'<!-- '.$this->newline;
- print_r($this->logArray);
- echo $this->newline.'-->'.$this->newline;
- return false;
- }
- return true;
- }
- // Connect to server
- $this->smtpConnect = fsockopen($this->smtpServer,$this->port,$errno,$error,$this->timeout);
- if (!is_resource($this->smtpConnect)) {
- return false;
- }
- // Hi, server!
- $this->sendCommand("HELLO {$this->localdomain}");
- $this->logArray['HELLO'] = $this->readResponse();
- // Let's know each other
- $this->sendCommand('AUTH LOGIN');
- $this->logArray['AUTH_REQUEST'] = $this->readResponse();
- // My password..
- $this->sendCommand(base64_encode($this->password));
- $this->logArray['REQUEST_PASSWD'] = $this->readResponse();
- // If error in response auth...
- if (substr($this->logArray['REQUEST_PASSWD'],0,3)!='235') {
- $this->Error .= 'Authorization error! '.$this->logArray['REQUEST_PASSWD'].$this->newline;
- return false;
- }
- // "From" mail...
- $this->sendCommand("MAIL FROM: {$this->from}");
- $this->logArray['MAIL_FROM_RESPONSE'] = $this->readResponse();
- if (substr($this->logArray['MAIL_FROM_RESPONSE'],0,3)!='250') {
- $this->Error .= 'Mistake in sender\'s address! '.$this->logArray['MAIL_FROM_RESPONSE'].$this->newline;
- return false;
- }
- // "To" address
- $this->sendCommand("RCPT TO: {$this->to}");
- $this->logArray['RCPT_TO_RESPONCE'] = $this->readResponse();
- if(substr($this->logArray['RCPT_TO_RESPONCE'],0,3) != '250')
- {
- $this->Error .= 'Mistake in reciepent address! '.$this->logArray['RCPT_TO_RESPONCE'].$this->newline;
- return false;
- }
- // Send data to server
- $this->sendCommand('DATA');
- $this->logArray['DATA_RESPONSE'] = $this->readResponse();
- // Send mail message
- if (!$this->sendMail()) return false;
- // Good bye server! =)
- $this->sendCommand('QUIT');
- $this->logArray['QUIT_RESPONSE'] = $this->readResponse();
- // Close smtp connect
- fclose($this->smtpConnect);
- return true;
- }
- private function Connect2Server() {
- // Connect to server
- $this->smtpConnect = fsockopen($this->smtpServer,$this->port,$errno,$error,$this->timeout);
- $this->logArray['CONNECT_RESPONSE'] = $this->readResponse();
- if (!is_resource($this->smtpConnect)) {
- return false;
- }
- $this->logArray['connection'] = "Connection accepted";
- // Hi, server!
- $this->sendCommand("HELLO {$this->localdomain}");
- $this->logArray['HELLO'] = $this->readResponse();
- // Let's know each other
- $this->sendCommand('AUTH LOGIN');
- $this->logArray['AUTH_REQUEST'] = $this->readResponse();
- // My name...
- $this->sendCommand(base64_encode($this->username));
- $this->logArray['REQUEST_USER'] = $this->readResponse();
- // My password..
- $this->sendCommand(base64_encode($this->password));
- $this->logArray['REQUEST_PASSWD'] = $this->readResponse();
- // If error in response auth...
- if (substr($this->logArray['REQUEST_PASSWD'],0,3)!='235') {
- $this->Error .= 'Authorization error! '.$this->logArray['REQUEST_PASSWD'].$this->newline;
- return false;
- }
- // "From" mail...
- $this->sendCommand("MAIL FROM: {$this->from}");
- $this->logArray['MAIL_FROM_RESPONSE'] = $this->readResponse();
- if (substr($this->logArray['MAIL_FROM_RESPONSE'],0,3)!='250') {
- $this->Error .= 'Mistake in sender\'s address! '.$this->logArray['MAIL_FROM_RESPONSE'].$this->newline;
- return false;
- }
- // "To" address
- $this->sendCommand("RCPT TO: {$this->to}");
- $this->logArray['RCPT_TO_RESPONCE'] = $this->readResponse();
- if(substr($this->logArray['RCPT_TO_RESPONCE'],0,3) != '250')
- {
- $this->Error .= 'Mistake in reciepent address! '.$this->logArray['RCPT_TO_RESPONCE'].$this->newline;
- }
- // Send data to server
- $this->sendCommand('DATA');
- $this->logArray['DATA_RESPONSE'] = $this->readResponse();
- // Send mail message
- if (!$this->sendMail()) return false;
- // Good bye server! =)
- $this->sendCommand('QUIT');
- $this->logArray['QUIT_RESPONSE'] = $this->readResponse();
- // Close smtp connect
- fclose($this->smtpConnect);
- return true;
- }
- $this->sendCommand($this->message);
- $this->sendCommand('.');
- $this->logArray['SEND_DATA_RESPONSE'] = $this->readResponse();
- if(substr($this->logArray['SEND_DATA_RESPONSE'],0,3)!='250') {
- $this->Error .= 'Mistake in sending data! '.$this->logArray['SEND_DATA_RESPONSE'].$this->newline;
- return false;
- }
- return true;
- }
- private function sendMail() {
- $this->sendHeaders();
- $this->sendCommand($this->message);
- $this->sendCommand('.');
- $this->logArray['SEND_DATA_RESPONSE'] = $this->readResponse();
- if(substr($this->logArray['SEND_DATA_RESPONSE'],0,3)!='250') {
- $this->Error .= 'Mistake in sending data! '.$this->logArray['SEND_DATA_RESPONSE'].$this->newline;
- return false;
- }
- return true;
- }
- // Function read response
- private function readResponse() {
- while($str = fgets($this->smtpConnect,4096))
- {
- $data .= $str;
- if(substr($str,3,1) == " ") { break; }
- }
- return $data;
- }
- // Function read response
- private function readResponse() {
- $data="";
- while($str = fgets($this->smtpConnect,4096))
- {
- $data .= $str;
- if(substr($str,3,1) == " ") { break; }
- }
- return $data;
- }
- // function send command to server
- private function sendCommand($string) {
- fputs($this->smtpConnect,$string.$this->newline);
- return ;
- }
- private function sendHeaders() {
- $this->sendCommand("Date: ".date("D, j M Y G:i:s")." +0700");
- $this->sendCommand("From: <{$this->from}>");
- $this->sendCommand("Reply-To: <{$this->from}>");
- $this->sendCommand("To: <{$this->to}>");
- $this->sendCommand("Subject: {$this->subject}");
- $this->sendCommand("MIME-Version: 1.0");
- $this->sendCommand("Content-Type: text/html; charset={$this->charset}");
- if ($this->contentTransferEncoding) $this->sendCommand("Content-Transfer-Encoding: {$this->contentTransferEncoding}");
- return ;
- }
- function __destruct() {
- if (is_resource($this->smtpConnect)) fclose($this->smtpConnect);
- }
- <?php
- class smtp_mail {
- private $smtpServer = 'smtp.gmail.com';
- private $port = '587';
- private $timeout = 30;
- private $username = 'myname@gmail.com';
- private $password = 'mypassword';
- private $username_email = 'myreceivingemail@gmail.com';
- private $newline = "\r\n";
- private $localdomain = 'http://www.mysite.com';
- private $charset = 'windows-1251';
- private $contentTransferEncoding = false;
- // Do not change anything below
- private $smtpConnect = false;
- private $to = false;
- private $to_admin = false;
- private $subject = false;
- private $message = false;
- private $headers = false;
- private $logArray = array(); // Array response message for debug
- private $Error = '';
- private $from = false;
- public function __construct($to, $subject, $message, $to_admin) {
- $this->to_admin = $to_admin;
- $this->to = (($this->to_admin === false) ? $this->username_email : $to );
- $this->from = (($this->to_admin === false) ? $to : $this->username_email );
- $this->subject = &$subject;
- $this->message = &$message;
- // Connect to server
- if(!$this->Connect2Server()) {
- // Display error message
- echo '<pre>'.trim($this->Error).'</pre>'.$this->newline.'<!-- '.$this->newline;
- print_r($this->logArray);
- echo $this->newline.'-->'.$this->newline;
- return false;
- }
- return true;
- }
- private function Connect2Server() {
- // Connect to server
- $this->smtpConnect = fsockopen($this->smtpServer,$this->port,$errno,$error,$this->timeout);
- $this->logArray['CONNECT_RESPONSE'] = $this->readResponse();
- if (!is_resource($this->smtpConnect)) {
- return false;
- }
- $this->logArray['connection'] = "Connection accepted";
- // Hi, server!
- $this->sendCommand("HELLO {$this->localdomain}");
- $this->logArray['HELLO'] = $this->readResponse();
- // Let's know each other
- $this->sendCommand('AUTH LOGIN');
- $this->logArray['AUTH_REQUEST'] = $this->readResponse();
- // My name...
- $this->sendCommand(base64_encode($this->username));
- $this->logArray['REQUEST_USER'] = $this->readResponse();
- // My password..
- $this->sendCommand(base64_encode($this->password));
- $this->logArray['REQUEST_PASSWD'] = $this->readResponse();
- // If error in response auth...
- if (substr($this->logArray['REQUEST_PASSWD'],0,3)!='235') {
- $this->Error .= 'Authorization error! '.$this->logArray['REQUEST_PASSWD'].$this->newline;
- return false;
- }
- // "From" mail...
- $this->sendCommand("MAIL FROM: {$this->from}");
- $this->logArray['MAIL_FROM_RESPONSE'] = $this->readResponse();
- if (substr($this->logArray['MAIL_FROM_RESPONSE'],0,3)!='250') {
- $this->Error .= 'Mistake in sender\'s address! '.$this->logArray['MAIL_FROM_RESPONSE'].$this->newline;
- return false;
- }
- // "To" address
- $this->sendCommand("RCPT TO: {$this->to}");
- $this->logArray['RCPT_TO_RESPONCE'] = $this->readResponse();
- if(substr($this->logArray['RCPT_TO_RESPONCE'],0,3) != '250')
- {
- $this->Error .= 'Mistake in reciepent address! '.$this->logArray['RCPT_TO_RESPONCE'].$this->newline;
- }
- // Send data to server
- $this->sendCommand('DATA');
- $this->logArray['DATA_RESPONSE'] = $this->readResponse();
- // Send mail message
- if (!$this->sendMail()) return false;
- // Good bye server! =)
- $this->sendCommand('QUIT');
- $this->logArray['QUIT_RESPONSE'] = $this->readResponse();
- // Close smtp connect
- fclose($this->smtpConnect);
- return true;
- }
- private function sendMail() {
- $this->sendHeaders();
- $this->sendCommand($this->message);
- $this->sendCommand('.');
- $this->logArray['SEND_DATA_RESPONSE'] = $this->readResponse();
- if(substr($this->logArray['SEND_DATA_RESPONSE'],0,3)!='250') {
- $this->Error .= 'Mistake in sending data! '.$this->logArray['SEND_DATA_RESPONSE'].$this->newline;
- return false;
- }
- return true;
- }
- // Function read response
- private function readResponse() {
- $data="";
- while($str = fgets($this->smtpConnect,4096))
- {
- $data .= $str;
- if(substr($str,3,1) == " ") { break; }
- }
- return $data;
- }
- // function send command to server
- private function sendCommand($string) {
- fputs($this->smtpConnect,$string.$this->newline);
- return ;
- }
- // function send headers
- private function sendHeaders() {
- $this->sendCommand("Date: ".date("D, j M Y G:i:s")." +0700");
- $this->sendCommand("From: <{$this->from}>");
- $this->sendCommand("Reply-To: <{$this->from}>");
- $this->sendCommand("To: <{$this->to}>");
- $this->sendCommand("Subject: {$this->subject}");
- $this->sendCommand("MIME-Version: 1.0");
- $this->sendCommand("Content-Type: text/html; charset={$this->charset}");
- if ($this->contentTransferEncoding) $this->sendCommand("Content-Transfer-Encoding: {$this->contentTransferEncoding}");
- return ;
- }
- function __destruct() {
- if (is_resource($this->smtpConnect)) fclose($this->smtpConnect);
- }
- }
- ?>
- if(new smtp_mail($to, $subject, $message, true))
- {
- echo 'Your message has being sent successfully.';
- }
- else
- {
- echo 'There was a problem sending the message';
- // Possibly log this for your reference
- }
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
- <html>
- <head>
- <title>Contact Form</title>
- <style type="text/css">
- #contact_form {
- width: 100%;
- }
- .form_col {
- float: left;
- margin-left: 10px;
- }
- </style>
- </head>
- <body>
- <div id="contact_form">
- <form action="contact.php" method="post">
- <div class="form_col">
- <p>Name:<br>
- Email Address:<br>
- To:<br>
- Subject:<br>
- Message:</p>
- </div>
- <div class="form_col">
- <p><input type="text" name="name" size="30"> Required<br>
- <input type="text" name="email" size="30"> Required<br>
- <input type="text" name="to" size="30"> To Administrator <input type="checkbox" name="to2"><br>
- <input type="text" name="subject" size="30"> Required<br>
- <textarea name="message" cols="50" rows="10"></textarea><br>
- <input type="submit" name="submit" value="Submit"> <input type="reset" value="Reset"> The Message is Required</p>
- </div>
- </form>
- </div>
- <p style="clear: both;"></p>
- </body>
- </html>
- <?php
- // Checking if the form was really submitted
- if(isset($_POST['submit']))
- {
- // We need to initiate the error array
- $error = array();
- // Here we are checking if their name was filled in.
- if(empty($_POST['name']))
- {
- // The name field was left empty
- $error[] = "You need to enter a valid name.";
- }
- // Checking if a valid email address was filled in.
- if(!preg_match("/(?:[a-zA-Z0-9_\'\^\&\/\+\-])+(?:\.(?:[a-zA-Z0-9_\'\^\&\/\+\-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)/", $_POST['email']))
- {
- // An invalid email address was filled in.
- $error[] = "You need to enter a valid email address.";
- }
- // We need to determine the recipient of the message
- if(isset($_POST['to_admin']))
- {
- // Even if the to field was given a different email address, this would over-ride that address and be sent to admin.
- $to_admin = true;
- $to = false;
- }
- elseif(preg_match("/(?:[a-zA-Z0-9_\'\^\&\/\+\-])+(?:\.(?:[a-zA-Z0-9_\'\^\&\/\+\-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)/", $_POST['to']))
- {
- // If the process reaches here, then the message would be sent to the address put in the to field
- $to_admin = false;
- $to = $_POST['to'];
- }
- else
- {
- // There was an error... it's not sent to the admin OR to anyone...
- $error[] = "You need a valid recipient's (to) email address.";
- }
- // Now we need to validate the subject of the message
- if(strlen($_POST['subject']) < 5)
- {
- // The message is under 5 characters.
- $error[] = "The subject needs to be greater then 5 characters";
- }
- // Validating the actuall message
- if(strlen($_POST['message']) < 5)
- {
- $error[] = "The message needs to be greater then 5 characters";
- }
- // Counting the number of errors there was in the form submittion
- if(count($error) > 0)
- {
- // There were errors... we can't send a message with errors in the form submittion.
- // Looping through each error and providing a good list of errors for the user.
- $errors = "<ol>";
- foreach($error as $er)
- {
- $errors .= "<li>{$er}</li>\n";
- }
- $errors .= "</ol>";
- echo $errors;
- }
- else
- {
- // There were no errors, lets submit the actual message
- if(new smtp_mail($to, $_POST['subject'], $_POST['message'], $to_admin))
- {
- echo "The mail was sent successfully.";
- }
- else
- {
- echo "There was a problem sending the message.";
- }
- }
- }
- ?>
- function __autoload($class_name) {
- if(file_exists('includes/' . $class_name . '.php'))
- {
- require_once 'includes/' . $class_name . '.php';
- }
- }
- includes / smtp_mail.php
- contact.html
- contact.php
- includes / smtp_mail.php
- includes / config.php
- contact.html
- contact. php
PHP Code: [ Select ]function __construct($to, $subject, $message, $to_admin) {
La construction déclaration de fonction. Définit les variables dynamiques qui seraient utilisés dans toute la classe.
PHP Code: [ Select ]$this->to = (($to_admin === true) ? $this->username_email : $to );
C'est la ligne qui détermine le destinataire du message électronique. Si $ To_admin est vraie, alors en son pouvoir pour admin, sinon ce n'est pas à l'admin.
PHP Code: [ Select ]$this->subject = &$subject;
Eh bien, ce sera l'objet du message.
PHP Code: [ Select ]$this->message = &$message;
Et c'est ici le message du message.
PHP Code: [ Select ]// Connect to server
if(!$this->Connect2Server()) {
Voici où nous en vérifier le résultat de la tentative de connexion. Vérification spécifique à l'échec. Si c'est un succès que nous n'avons pas besoin (ne doit pas) echo rien.
PHP Code: [ Select ]// Display error message
echo '<pre>'.trim($this->Error).'</pre>'.$this->newline.'<!-- '.$this->newline;
print_r($this->logArray);
echo $this->newline.'-->'.$this->newline;
return false;
}
C'est là que nous imprimons les erreurs à l'écran et le débogage du code source...nous avons également retourner false pour vous permettent d'imprimer un message à l'utilisateur en leur disant que l'envoi de ce message n'a pas fonctionné.
PHP Code: [ Select ]return true;
}
Si la connexion a fonctionné, et l'instruction if qui vérifie l'échec ne déclenche pas, alors nous retourner true pour vous permettre d'imprimer un message à l'utilisateur en leur disant que le message a été envoyé avec succès.
Ci-dessous est la fonction dans son intégralité.
PHP Code: [ Select ]public function __construct($to, $subject, $message, $to_admin) {
$this->to_admin = $to_admin;
$this->to = (($this->to_admin === false) ? $this->username_email : $to );
$this->from = (($this->to_admin === false) ? $to : $this->username_email );
$this->subject = &$subject;
$this->message = &$message;
// Connect to server
if(!$this->Connect2Server()) {
// Display error message
echo '<pre>'.trim($this->Error).'</pre>'.$this->newline.'<!-- '.$this->newline;
print_r($this->logArray);
echo $this->newline.'-->'.$this->newline;
return false;
}
return true;
}
3.3 Connexion au serveur SMTP
Maintenant, ce que nous devons faire est de se connecter au serveur.
PHP Code: [ Select ]private function Connect2Server() {
Ici, nous lancer la fonction. Nous faisons cette fonction privée depuis que cette classe est censé avoir accès à la fonction.
PHP Code: [ Select ]// Connect to server
$this->smtpConnect = fsockopen($this->smtpServer,$this->port,$errno,$error,$this->timeout);
Ici, nous nous connecter à un serveur SMTP en utilisant les informations fournies dans les variables déclarées.
PHP Code: [ Select ]$this->logArray['CONNECT_RESPONSE'] = $this->readResponse();
Ici nous enregistrons la réponse / résultat de la tentative de connexion SMTP.
PHP Code: [ Select ]if (!is_resource($this->smtpConnect)) {
return false;
}
Si la connexion a échoué, nous return false. quelque chose de revenir à ce point arrête la fonction de poursuivre et se termine le script.
PHP Code: [ Select ]$this->logArray['connection'] = "Connection accepted";
Si nous avons atteint ce point, cela signifie que le serveur SMTP est correctement connecté à...il permet de connecter fins de débogage.
PHP Code: [ Select ]// Hi, server!
$this->sendCommand("HELLO {$this->localdomain}");
$this->logArray['HELLO'] = $this->readResponse();
C'est ici que nous vous présentons notre site sur le serveur SMTP et de stocker la réponse du serveur SMTP pour débogage.
PHP Code: [ Select ]// Let's know each other
$this->sendCommand('AUTH LOGIN');
$this->logArray['AUTH_REQUEST'] = $this->readResponse();
C'est là où le script demande l'autorisation et d'engager la phase nom d'utilisateur / mot de passe du processus de connexion. Nous sommes magasin la réponse fins de débogage.
PHP Code: [ Select ]// My password..
$this->sendCommand(base64_encode($this->password));
$this->logArray['REQUEST_PASSWD'] = $this->readResponse();
Dans cette phase, nous envoyons le mot de passe, puis de conserver la réponse fins de débogage.
PHP Code: [ Select ]// If error in response auth...
if (substr($this->logArray['REQUEST_PASSWD'],0,3)!='235') {
$this->Error .= 'Authorization error! '.$this->logArray['REQUEST_PASSWD'].$this->newline;
return false;
}
Voici où nous en vérifier le résultat du processus de connexion. Nous conservons l'erreur dans la variable d'erreur et retourne false, l'arrêt du script.
PHP Code: [ Select ]// "From" mail...
$this->sendCommand("MAIL FROM: {$this->from}");
$this->logArray['MAIL_FROM_RESPONSE'] = $this->readResponse();
Ici, nous indiquons le serveur SMTP qui le message est envoyé à partir et stocker la réponse fins de débogage.
PHP Code: [ Select ]if (substr($this->logArray['MAIL_FROM_RESPONSE'],0,3)!='250') {
$this->Error .= 'Mistake in sender\'s address! '.$this->logArray['MAIL_FROM_RESPONSE'].$this->newline;
return false;
}
Vérification du résultat de la validation de l'adresse «De». Si la réponse n'est pas correcte, nous stockons l'erreur dans la variable d'erreur et de fausse déclaration, l'arrêt du script.
PHP Code: [ Select ]// "To" address
$this->sendCommand("RCPT TO: {$this->to}");
$this->logArray['RCPT_TO_RESPONCE'] = $this->readResponse();
Ici, nous indiquons le serveur SMTP de l'adresse à laquelle le message a été écrit pour. Ensuite, nous stockons la réponse fins de débogage.
PHP Code: [ Select ]if(substr($this->logArray['RCPT_TO_RESPONCE'],0,3) != '250')
{
$this->Error .= 'Mistake in reciepent address! '.$this->logArray['RCPT_TO_RESPONCE'].$this->newline;
return false;
}
Ici nous vérifions le résultat de la validation de l'adresse du destinataire. Stockage de l'erreur et retourne false, l'arrêt du script.
PHP Code: [ Select ]// Send data to server
$this->sendCommand('DATA');
$this->logArray['DATA_RESPONSE'] = $this->readResponse();
Ici, nous envoyer les données et le stockage de la réponse fins de débogage.
PHP Code: [ Select ]// Send mail message
if (!$this->sendMail()) return false;
Ici, nous envoyer le message électronique...nous vérifions spécifiquement à l'échec, et si elle a échoué, retourne false, ce qui vous permet d'écrire votre message propre échec.
PHP Code: [ Select ]// Good bye server! =)
$this->sendCommand('QUIT');
$this->logArray['QUIT_RESPONSE'] = $this->readResponse();
Ici nous nous apprêtons à vous déconnecter du serveur SMTP. Stockage de la réponse fins de débogage.
PHP Code: [ Select ]// Close smtp connect
fclose($this->smtpConnect);
return true;
}
Ici nous sommes en fait déconnecter du serveur SMTP. Puisque nous sommes arrivés à ce point, l'e-mail a été envoyé, et tout a fonctionné correctement, alors nous sommes de retour pour vrai succès.
La raison pour laquelle nous avons la commande "QUIT" et puis la déconnexion, au lieu de simplement déconnecter, c'est la même raison que vous appuyez sur Arrêter pour éteindre votre ordinateur, au lieu de simplement tirer la prise. (Au moins c'est comme ça que je le vois).
Maintenant, c'est ici que la fonction dans son intégralité.
PHP Code: [ Select ]private function Connect2Server() {
// Connect to server
$this->smtpConnect = fsockopen($this->smtpServer,$this->port,$errno,$error,$this->timeout);
$this->logArray['CONNECT_RESPONSE'] = $this->readResponse();
if (!is_resource($this->smtpConnect)) {
return false;
}
$this->logArray['connection'] = "Connection accepted";
// Hi, server!
$this->sendCommand("HELLO {$this->localdomain}");
$this->logArray['HELLO'] = $this->readResponse();
// Let's know each other
$this->sendCommand('AUTH LOGIN');
$this->logArray['AUTH_REQUEST'] = $this->readResponse();
// My name...
$this->sendCommand(base64_encode($this->username));
$this->logArray['REQUEST_USER'] = $this->readResponse();
// My password..
$this->sendCommand(base64_encode($this->password));
$this->logArray['REQUEST_PASSWD'] = $this->readResponse();
// If error in response auth...
if (substr($this->logArray['REQUEST_PASSWD'],0,3)!='235') {
$this->Error .= 'Authorization error! '.$this->logArray['REQUEST_PASSWD'].$this->newline;
return false;
}
// "From" mail...
$this->sendCommand("MAIL FROM: {$this->from}");
$this->logArray['MAIL_FROM_RESPONSE'] = $this->readResponse();
if (substr($this->logArray['MAIL_FROM_RESPONSE'],0,3)!='250') {
$this->Error .= 'Mistake in sender\'s address! '.$this->logArray['MAIL_FROM_RESPONSE'].$this->newline;
return false;
}
// "To" address
$this->sendCommand("RCPT TO: {$this->to}");
$this->logArray['RCPT_TO_RESPONCE'] = $this->readResponse();
if(substr($this->logArray['RCPT_TO_RESPONCE'],0,3) != '250')
{
$this->Error .= 'Mistake in reciepent address! '.$this->logArray['RCPT_TO_RESPONCE'].$this->newline;
}
// Send data to server
$this->sendCommand('DATA');
$this->logArray['DATA_RESPONSE'] = $this->readResponse();
// Send mail message
if (!$this->sendMail()) return false;
// Good bye server! =)
$this->sendCommand('QUIT');
$this->logArray['QUIT_RESPONSE'] = $this->readResponse();
// Close smtp connect
fclose($this->smtpConnect);
return true;
}
3.4 La fonction qui envoie
C'est la fonction qui fait l'envoi effectif du message.
PHP Code: [ Select ]private function sendMail() {
Une fois encore nous créer cette fonction en tant que privé.
PHP Code: [ Select ]$this->sendHeaders();
Voici où nous lancer la fonction qui crée et envoie les en-têtes du message électronique
PHP Code: [ Select ]$this->sendCommand($this->message);
$this->sendCommand('.');
$this->logArray['SEND_DATA_RESPONSE'] = $this->readResponse();
Ici, nous envoyons les données et le stockage de la réponse fins de débogage.
PHP Code: [ Select ]if(substr($this->logArray['SEND_DATA_RESPONSE'],0,3)!='250') {
$this->Error .= 'Mistake in sending data! '.$this->logArray['SEND_DATA_RESPONSE'].$this->newline;
return false;
}
Ici nous vérifions le processus d'envoi à l'échec. Si elle ne nous stocker l'erreur dans la variable et fausse déclaration, l'arrêt du script.
PHP Code: [ Select ]return true;
}
Puisque nous sommes arrivés à ce point, le message a été envoyé avec succès, nous sommes donc de retour pour vrai succès
Voici cette fonction dans son intégralité.
PHP Code: [ Select ]private function sendMail() {
$this->sendHeaders();
$this->sendCommand($this->message);
$this->sendCommand('.');
$this->logArray['SEND_DATA_RESPONSE'] = $this->readResponse();
if(substr($this->logArray['SEND_DATA_RESPONSE'],0,3)!='250') {
$this->Error .= 'Mistake in sending data! '.$this->logArray['SEND_DATA_RESPONSE'].$this->newline;
return false;
}
return true;
}
3,5 lecture des réponses
Nous avons maintenant besoin de créer une fonction qui lit les réponses envoyées par le serveur SMTP.
PHP Code: [ Select ]// Function read response
private function readResponse() {
Une fois de plus...fonction privée
PHP Code: [ Select ]$data="";
Nous initions la variable...ne pouvez pas ajouter à une variable sans qu'il soit premier
PHP Code: [ Select ]while($str = fgets($this->smtpConnect,4096))
{
$data .= $str;
if(substr($str,3,1) == " ") { break; }
}
Nous sommes une boucle à travers la réponse et la récupération des réponses
PHP Code: [ Select ]return $data;
}
Nous sommes de retour de toutes les réponses que nous avons reçu depuis le serveur SMTP.
Voici la fonction dans son intégralité.
PHP Code: [ Select ]// Function read response
private function readResponse() {
$data="";
while($str = fgets($this->smtpConnect,4096))
{
$data .= $str;
if(substr($str,3,1) == " ") { break; }
}
return $data;
}
3.6 Envoi de nos commandes Voici quand nous autoritaire. Nous avons besoin d'une fonction pour envoyer nos commandes pour le serveur SMTP.
PHP Code: [ Select ]// function send command to server
private function sendCommand($string) {
fputs($this->smtpConnect,$string.$this->newline);
return ;
}
Nous créons une fonction privée, puis envoyer notre commande. Retour rien puisqu'il n'y a rien de revenir.
[tuthead] 3.7 Créer des en-têtes
Maintenant nous devons créer les en-têtes à être utilisé dans ce message que vous avez envoyé.
PHP Code: [ Select ]private function sendHeaders() {
$this->sendCommand("Date: ".date("D, j M Y G:i:s")." +0700");
$this->sendCommand("From: <{$this->from}>");
$this->sendCommand("Reply-To: <{$this->from}>");
$this->sendCommand("To: <{$this->to}>");
$this->sendCommand("Subject: {$this->subject}");
$this->sendCommand("MIME-Version: 1.0");
$this->sendCommand("Content-Type: text/html; charset={$this->charset}");
if ($this->contentTransferEncoding) $this->sendCommand("Content-Transfer-Encoding: {$this->contentTransferEncoding}");
return ;
}
Voici cette fonction privé qui crée les en-têtes. Et ne renvoie rien puisqu'il n'y a rien de revenir.3.8 Détruire la classe
Maintenant, ce que nous devons faire est de détruire la classe.
PHP Code: [ Select ]function __destruct() {
if (is_resource($this->smtpConnect)) fclose($this->smtpConnect);
}
Le but de cette fonction est si en tout cas que la classe est arrêté avant de débrancher le serveur SMTP, nous serait-il débrancher ici.3. 9 La classe en elle et #39; ensemble s
Voici cette classe dans son intégralité (Im pas l'attacher, puisque ce forum a avancé ce bloc qui s'effondre code PHP).
Permet de sauvegarder cette page en tant que smtp_mail.php
PHP Code: [ Select ]<?php
class smtp_mail {
private $smtpServer = 'smtp.gmail.com';
private $port = '587';
private $timeout = 30;
private $username = 'myname@gmail.com';
private $password = 'mypassword';
private $username_email = 'myreceivingemail@gmail.com';
private $newline = "\r\n";
private $localdomain = 'http://www.mysite.com';
private $charset = 'windows-1251';
private $contentTransferEncoding = false;
// Do not change anything below
private $smtpConnect = false;
private $to = false;
private $to_admin = false;
private $subject = false;
private $message = false;
private $headers = false;
private $logArray = array(); // Array response message for debug
private $Error = '';
private $from = false;
public function __construct($to, $subject, $message, $to_admin) {
$this->to_admin = $to_admin;
$this->to = (($this->to_admin === false) ? $this->username_email : $to );
$this->from = (($this->to_admin === false) ? $to : $this->username_email );
$this->subject = &$subject;
$this->message = &$message;
// Connect to server
if(!$this->Connect2Server()) {
// Display error message
echo '<pre>'.trim($this->Error).'</pre>'.$this->newline.'<!-- '.$this->newline;
print_r($this->logArray);
echo $this->newline.'-->'.$this->newline;
return false;
}
return true;
}
private function Connect2Server() {
// Connect to server
$this->smtpConnect = fsockopen($this->smtpServer,$this->port,$errno,$error,$this->timeout);
$this->logArray['CONNECT_RESPONSE'] = $this->readResponse();
if (!is_resource($this->smtpConnect)) {
return false;
}
$this->logArray['connection'] = "Connection accepted";
// Hi, server!
$this->sendCommand("HELLO {$this->localdomain}");
$this->logArray['HELLO'] = $this->readResponse();
// Let's know each other
$this->sendCommand('AUTH LOGIN');
$this->logArray['AUTH_REQUEST'] = $this->readResponse();
// My name...
$this->sendCommand(base64_encode($this->username));
$this->logArray['REQUEST_USER'] = $this->readResponse();
// My password..
$this->sendCommand(base64_encode($this->password));
$this->logArray['REQUEST_PASSWD'] = $this->readResponse();
// If error in response auth...
if (substr($this->logArray['REQUEST_PASSWD'],0,3)!='235') {
$this->Error .= 'Authorization error! '.$this->logArray['REQUEST_PASSWD'].$this->newline;
return false;
}
// "From" mail...
$this->sendCommand("MAIL FROM: {$this->from}");
$this->logArray['MAIL_FROM_RESPONSE'] = $this->readResponse();
if (substr($this->logArray['MAIL_FROM_RESPONSE'],0,3)!='250') {
$this->Error .= 'Mistake in sender\'s address! '.$this->logArray['MAIL_FROM_RESPONSE'].$this->newline;
return false;
}
// "To" address
$this->sendCommand("RCPT TO: {$this->to}");
$this->logArray['RCPT_TO_RESPONCE'] = $this->readResponse();
if(substr($this->logArray['RCPT_TO_RESPONCE'],0,3) != '250')
{
$this->Error .= 'Mistake in reciepent address! '.$this->logArray['RCPT_TO_RESPONCE'].$this->newline;
}
// Send data to server
$this->sendCommand('DATA');
$this->logArray['DATA_RESPONSE'] = $this->readResponse();
// Send mail message
if (!$this->sendMail()) return false;
// Good bye server! =)
$this->sendCommand('QUIT');
$this->logArray['QUIT_RESPONSE'] = $this->readResponse();
// Close smtp connect
fclose($this->smtpConnect);
return true;
}
private function sendMail() {
$this->sendHeaders();
$this->sendCommand($this->message);
$this->sendCommand('.');
$this->logArray['SEND_DATA_RESPONSE'] = $this->readResponse();
if(substr($this->logArray['SEND_DATA_RESPONSE'],0,3)!='250') {
$this->Error .= 'Mistake in sending data! '.$this->logArray['SEND_DATA_RESPONSE'].$this->newline;
return false;
}
return true;
}
// Function read response
private function readResponse() {
$data="";
while($str = fgets($this->smtpConnect,4096))
{
$data .= $str;
if(substr($str,3,1) == " ") { break; }
}
return $data;
}
// function send command to server
private function sendCommand($string) {
fputs($this->smtpConnect,$string.$this->newline);
return ;
}
// function send headers
private function sendHeaders() {
$this->sendCommand("Date: ".date("D, j M Y G:i:s")." +0700");
$this->sendCommand("From: <{$this->from}>");
$this->sendCommand("Reply-To: <{$this->from}>");
$this->sendCommand("To: <{$this->to}>");
$this->sendCommand("Subject: {$this->subject}");
$this->sendCommand("MIME-Version: 1.0");
$this->sendCommand("Content-Type: text/html; charset={$this->charset}");
if ($this->contentTransferEncoding) $this->sendCommand("Content-Transfer-Encoding: {$this->contentTransferEncoding}");
return ;
}
function __destruct() {
if (is_resource($this->smtpConnect)) fclose($this->smtpConnect);
}
}
?>
4.0 Utilisation de classe
Maintenant, nous voulons un moyen simple d'utiliser cette classe SMTP.
PHP Code: [ Select ]if(new smtp_mail($to, $subject, $message, true))
{
echo 'Your message has being sent successfully.';
}
else
{
echo 'There was a problem sending the message';
// Possibly log this for your reference
}
Simple, non?5. 0 Le formulaire
Maintenant nous avons besoin de la forme à utiliser que les gens vont utiliser pour remplir pour envoyer leur message.
Permet de sauvegarder cette page en tant que contact.html
HTML Code: [ Select ]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Contact Form</title>
<style type="text/css">
#contact_form {
width: 100%;
}
.form_col {
float: left;
margin-left: 10px;
}
</style>
</head>
<body>
<div id="contact_form">
<form action="contact.php" method="post">
<div class="form_col">
<p>Name:<br>
Email Address:<br>
To:<br>
Subject:<br>
Message:</p>
</div>
<div class="form_col">
<p><input type="text" name="name" size="30"> Required<br>
<input type="text" name="email" size="30"> Required<br>
<input type="text" name="to" size="30"> To Administrator <input type="checkbox" name="to2"><br>
<input type="text" name="subject" size="30"> Required<br>
<textarea name="message" cols="50" rows="10"></textarea><br>
<input type="submit" name="submit" value="Submit"> <input type="reset" value="Reset"> The Message is Required</p>
</div>
</form>
</div>
<p style="clear: both;"></p>
</body>
</html>
C'est juste une belle forme de style pour vous à utiliser avec cette classe.5.1 Le processeur de formulaire
Maintenant passons à créer une page PHP qui traite le formulaire ci-dessus.
Permet de sauvegarder cette page en tant que contact.php
PHP Code: [ Select ]<?php
// Checking if the form was really submitted
if(isset($_POST['submit']))
{
// We need to initiate the error array
$error = array();
// Here we are checking if their name was filled in.
if(empty($_POST['name']))
{
// The name field was left empty
$error[] = "You need to enter a valid name.";
}
// Checking if a valid email address was filled in.
if(!preg_match("/(?:[a-zA-Z0-9_\'\^\&\/\+\-])+(?:\.(?:[a-zA-Z0-9_\'\^\&\/\+\-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)/", $_POST['email']))
{
// An invalid email address was filled in.
$error[] = "You need to enter a valid email address.";
}
// We need to determine the recipient of the message
if(isset($_POST['to_admin']))
{
// Even if the to field was given a different email address, this would over-ride that address and be sent to admin.
$to_admin = true;
$to = false;
}
elseif(preg_match("/(?:[a-zA-Z0-9_\'\^\&\/\+\-])+(?:\.(?:[a-zA-Z0-9_\'\^\&\/\+\-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)/", $_POST['to']))
{
// If the process reaches here, then the message would be sent to the address put in the to field
$to_admin = false;
$to = $_POST['to'];
}
else
{
// There was an error... it's not sent to the admin OR to anyone...
$error[] = "You need a valid recipient's (to) email address.";
}
// Now we need to validate the subject of the message
if(strlen($_POST['subject']) < 5)
{
// The message is under 5 characters.
$error[] = "The subject needs to be greater then 5 characters";
}
// Validating the actuall message
if(strlen($_POST['message']) < 5)
{
$error[] = "The message needs to be greater then 5 characters";
}
// Counting the number of errors there was in the form submittion
if(count($error) > 0)
{
// There were errors... we can't send a message with errors in the form submittion.
// Looping through each error and providing a good list of errors for the user.
$errors = "<ol>";
foreach($error as $er)
{
$errors .= "<li>{$er}</li>\n";
}
$errors .= "</ol>";
echo $errors;
}
else
{
// There were no errors, lets submit the actual message
if(new smtp_mail($to, $_POST['subject'], $_POST['message'], $to_admin))
{
echo "The mail was sent successfully.";
}
else
{
echo "There was a problem sending the message.";
}
}
}
?>
5. 2 La fonction Magic
Ce n'est pas nécessaire, mais c'est ce que j'utilise toujours si mal nous le suggérer ici.
J'ai toujours utiliser la fonction Magic __autoload () pour charger les classes. Ce qui me sauve la ligne 1 à chaque fois que je veux utiliser une classe. De cette façon, je n'ai pas d'inclure le fichier PHP qui contient la classe...il __autoload () s.
Pour qu'il fonctionne correctement, le fichier PHP a besoin d'être sauvé de la même façon que la classe est nommé...dans ce cas, le nom de classe est smtp_mail et son enregistré en tant que smtp_mail.php. Voici donc cette fonction.
PHP Code: [ Select ]function __autoload($class_name) {
if(file_exists('includes/' . $class_name . '.php'))
{
require_once 'includes/' . $class_name . '.php';
}
}
Ce que j'ai cette fonction faire est de vérifier si cette page existe dans le includes / répertoire...cela signifie, que lorsque je démarre cette classe il va essayer de [/ b] comprend smtp_mail.php / [/ b].
Cela signifie que la structure du répertoire devrait ressembler à ce qui suit:
Une autre chose que je recommanderais de faire est d'avoir une page globale qui serait inclus dans chaque page de tous les temps. Jetez un oeil à ce tutoriel pour mieux comprendre ce que Im parle ici.
Dans ce fichier de configuration, vous mettez cette fonction magique. Si cette astuce consiste à entrer en jeu ici, alors la structure de répertoire est modifié:
Donc, si vous regardez la ligne où il comprendrait la classe smtp_mail (en contact.php):
PHP Code: [ Select ]if(new smtp_mail($to, $_POST['subject'], $_POST['message'], $to_admin))
Vous voyez que ses instancier un nouvel objet "smtp_mail" sans moi y compris smtp_mail.php. Lorsque l'analyseur PHP arrive à cette ligne, il tenterait d'inclure includes / smtp_mail.php être en mesure d'instancier l'objet. C'est la beauté des fonctions magiques.
Si vous ne souhaitez pas utiliser la fonction magique, il suffit d'inclure smtp_mail. php dans contact.php. N'oubliez pas d'inclure le droit smtp_mail.php avant la ligne qui utilise cette fonction. (Le droit bloc de code PHP ci-dessus présente).
PHP Code: [ Select ]include_once 'includes/smtp_mail.php';
6.0 Conclusion
Il est (dans la plupart des cas) une valeur inestimable d'avoir un moyen d'envoyer des messages e-mail à vos utilisateurs, que ce soit pour les bulletins ou tout simplement mises à jour ou que vous ayez besoin d'envoyer un message pour, vous avez maintenant obtenu une manière assez avancée de l'envoi de messages en utilisant un SMTP serveur.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
- Anonymous
- Bot


- Inscription: 25 Feb 2008
- Messages: ?
- Loc: Ozzuland
- Status: Online
Septembre 27th, 2010, 11:45 pm
- Bogey
- Bogey


- Inscription: Juil 14, 2005
- Messages: 8212
- Loc: USA
- Status: Offline
- Mark709
- Novice


- Inscription: Sep 30, 2010
- Messages: 22
- Status: Offline
- spork
- Brewmaster


- Inscription: Sep 22, 2003
- Messages: 6134
- Loc: Seattle, WA
- Status: Offline
Je ne pense pas que vous comprenez bien le but de les constructeurs et destructeurs dans ce tutoriel. Les constructeurs sont appelés à chaque fois qu'un nouvel objet est créé, leur but est d'initialiser les membres de données et mettre en place l'objet à être utilisé par l'appelant. Ne devriez-vous retourner quelque chose d'un constructeur, la nature de la fonction est de retourner l'objet créé.
L'autre problème est que vous utilisez la création d'objet comme un appel de méthode, alors qu'en réalité, vous devriez être bien la construction de l'objet et le puis permettant à l'appelant à prendre des mesures avec lui. Invoquant l'e-mail () au moment de l'instanciation fonctionnalité n'est pas juste, je devrais être en mesure de créer un objet smtp_mail puis choisissez quand le courrier est envoyé.
Le but d'un destructeur n'est pas à prendre des mesures "au cas où la classe est à l'arrêt»; classes ne peuvent pas «arrêt» ou «aller» (threads et processus peuvent, mais thats un autre sujet). Le but du destructeur est à nettoyer après l'objet quand il est soit directement supprimé ou est hors de portée (ou dans le cas des langues gérées, quand il fait garbage collector).
Je vois aussi des bouts de code HTML et les appels aux fonctions de sortie différents jonché toute la classe, qui associe étroitement la classe à n'importe quelle application l'utilisateur prévoit de l'utiliser en Il serait préférable de permettre à l'utilisateur de lire / mettre à jour des résultats via des accesseurs et des mutateurs telles que l'application utilisant cette classe peut sortir les données comme bon lui semble.
Pour cette classe pour être utile dans une application, il doit être conforme à une interface qui me permettrait de l'utiliser comme ceci:
L'autre problème est que vous utilisez la création d'objet comme un appel de méthode, alors qu'en réalité, vous devriez être bien la construction de l'objet et le puis permettant à l'appelant à prendre des mesures avec lui. Invoquant l'e-mail () au moment de l'instanciation fonctionnalité n'est pas juste, je devrais être en mesure de créer un objet smtp_mail puis choisissez quand le courrier est envoyé.
Le but d'un destructeur n'est pas à prendre des mesures "au cas où la classe est à l'arrêt»; classes ne peuvent pas «arrêt» ou «aller» (threads et processus peuvent, mais thats un autre sujet). Le but du destructeur est à nettoyer après l'objet quand il est soit directement supprimé ou est hors de portée (ou dans le cas des langues gérées, quand il fait garbage collector).
Je vois aussi des bouts de code HTML et les appels aux fonctions de sortie différents jonché toute la classe, qui associe étroitement la classe à n'importe quelle application l'utilisateur prévoit de l'utiliser en Il serait préférable de permettre à l'utilisateur de lire / mettre à jour des résultats via des accesseurs et des mutateurs telles que l'application utilisant cette classe peut sortir les données comme bon lui semble.
Pour cette classe pour être utile dans une application, il doit être conforme à une interface qui me permettrait de l'utiliser comme ceci:
PHP Code: [ Select ]
<?php
$myMailer = new SmtpMailer(new SmtpMailerCredentials(...));
// a class such as SmtpMailerCredentials could help
// organize and decouple the non-essential aspects of
// the mail from the mailer class
// don't assume only one recipient
$myMailer->addToAddress("someone@domain.com");
$myMailer->addToAddress("someoneelse@domain.com");
// ...and don't assume everyone will be on the "to" line!
$myMailer->addCcAddress("athirdperson@domain.com");
$myMailer->setSubject("This is a test message");
$myMailer->setBody("This is the body of the message.");
// do some other stuff. perhaps add this mailer
// object to a queue of mail to be sent, or do
// whatever else I need to do before the email goes out
// now I choose exactly when to send the mail
$mailer->send();
?<
$myMailer = new SmtpMailer(new SmtpMailerCredentials(...));
// a class such as SmtpMailerCredentials could help
// organize and decouple the non-essential aspects of
// the mail from the mailer class
// don't assume only one recipient
$myMailer->addToAddress("someone@domain.com");
$myMailer->addToAddress("someoneelse@domain.com");
// ...and don't assume everyone will be on the "to" line!
$myMailer->addCcAddress("athirdperson@domain.com");
$myMailer->setSubject("This is a test message");
$myMailer->setBody("This is the body of the message.");
// do some other stuff. perhaps add this mailer
// object to a queue of mail to be sent, or do
// whatever else I need to do before the email goes out
// now I choose exactly when to send the mail
$mailer->send();
?<
- <?php
- $myMailer = new SmtpMailer(new SmtpMailerCredentials(...));
- // a class such as SmtpMailerCredentials could help
- // organize and decouple the non-essential aspects of
- // the mail from the mailer class
- // don't assume only one recipient
- $myMailer->addToAddress("someone@domain.com");
- $myMailer->addToAddress("someoneelse@domain.com");
- // ...and don't assume everyone will be on the "to" line!
- $myMailer->addCcAddress("athirdperson@domain.com");
- $myMailer->setSubject("This is a test message");
- $myMailer->setBody("This is the body of the message.");
- // do some other stuff. perhaps add this mailer
- // object to a queue of mail to be sent, or do
- // whatever else I need to do before the email goes out
- // now I choose exactly when to send the mail
- $mailer->send();
- ?<
The Beer Monocle. Classy.
- Bogey
- Bogey


- Inscription: Juil 14, 2005
- Messages: 8212
- Loc: USA
- Status: Offline
Merci pour le Spork avis. Je m'en souviens création de la classe à partir d'un fouillis de code écrit comme une fonction (que je pourrais avoir tort cette classe pour une autre). Je l'ai trouvé dans mon répertoire de dépôt de classe sur mon ordinateur et depuis il fonctionne parfaitement pour moi (je ne peux que faire des cours débutants de travail
Je ne suis pas tellement avancé gif "title =":(" alt =" Sad "> ) Alors j'ai décidé de faire une promenade à travers-tutoriel.
Ill le corriger dès que de se conformer à votre interface proposée et la modification de certaines portions de code pour corriger les problèmes que vous avez publiés. Merci pour le heads up.
Ill le corriger dès que de se conformer à votre interface proposée et la modification de certaines portions de code pour corriger les problèmes que vous avez publiés. Merci pour le heads up.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
- pagebot
- Novice


- Inscription: Nov 17, 2010
- Messages: 16
- Loc: USA
- Status: Offline
- Mark709
- Novice


- Inscription: Sep 30, 2010
- Messages: 22
- Status: Offline
Révision de cet article de Bogey me fait encore réaliser à quel point nous sommes chanceux d'avoir comme membres Bogey et Spork et d'autres (sans nom) qui s'intéressent assez d'autres à écrire un tel bien - article CONSTRUITS et clair.
Si vous avez le temps pourrait également envisager de vous - y compris - la façon d'utiliser le code ci-dessus et INSERT - une capacité à exécuter ce que
1. une tâche cron
2. d'envoyer une e-mail toutes les 10 secondes
et / ou (ce qui n'est jamais le moindre - important en tant que serveur doit passer d'un hôte à un autre Co)
3. un maximum de...e-mails par heure
RAISON - il ya beaucoup, beaucoup d'utilisateurs qui sont en permanence à des problèmes autour de ces 3 éléments et que je n'ai pas encore vu une telle explication claire de la manière de contourner les problèmes que beaucoup se plaignent de leurs arrêts cron (à dire 500 e-mails dans le premier heure) pour dire que leur travail consiste à envoyer des emails 5000 - leur sort est de savoir comment relancer sans faire / envoyer les 500 premiers e-mails une deuxième fois.
Apprécierait vos idées sur la façon de résoudre ce genre de questions et je vous remercie beaucoup pour les explications du segment CHAQUE - vous êtes un grand professeur et un exemple pour nous "newbies"
Si vous avez le temps pourrait également envisager de vous - y compris - la façon d'utiliser le code ci-dessus et INSERT - une capacité à exécuter ce que
1. une tâche cron
2. d'envoyer une e-mail toutes les 10 secondes
et / ou (ce qui n'est jamais le moindre - important en tant que serveur doit passer d'un hôte à un autre Co)
3. un maximum de...e-mails par heure
RAISON - il ya beaucoup, beaucoup d'utilisateurs qui sont en permanence à des problèmes autour de ces 3 éléments et que je n'ai pas encore vu une telle explication claire de la manière de contourner les problèmes que beaucoup se plaignent de leurs arrêts cron (à dire 500 e-mails dans le premier heure) pour dire que leur travail consiste à envoyer des emails 5000 - leur sort est de savoir comment relancer sans faire / envoyer les 500 premiers e-mails une deuxième fois.
Apprécierait vos idées sur la façon de résoudre ce genre de questions et je vous remercie beaucoup pour les explications du segment CHAQUE - vous êtes un grand professeur et un exemple pour nous "newbies"
Page 1 sur 1
Pour répondre à ce sujet, vous devez vous connecter ou vous enregistrer. Il est gratuit.
Afficher de l'information
- Total des messages de ce sujet: 8 messages
- Modérateur: Tutorial Writers
- Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités
- Vous ne pouvez pas poster de nouveaux sujets
- Vous ne pouvez pas répondre aux sujets
- Vous ne pouvez pas éditer vos messages
- Vous ne pouvez pas supprimer vos messages
- Vous ne pouvez pas joindre des fichiers
