Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [phpBB | sokety] Fragment kodu wysyłający maile
Forum PHP.pl > Forum > PHP
Cudi
Znalazłem w jednym z plików phpBB (chyba smtp.php) funkcje która potrafi wysyłać maile przy wyłączonej funkcji mail(), korzystając z podanych danych. Przerobiłem ją do swoich potrzeb, spolszczyłem i troche poprawiłem (winksmiley.jpg), ale niestety jest kłopot, pole Od (from) w wysyłanych mailach jest puste. Podam może kod:
[php:1:661b6062cb]<?php
$smtp_host = 'smtp.wp.pl'; // Adres smtp np. smtp.wp.pl
$smtp_user = 'cudik'; // Użytkownik serwera smtp
$smtp_pass = '*****'; // Hasło
$email = 'cudik@wp.pl'; // Adres od którego przychodzą maile

/* Funkcja do wysyłania maili bez użycia funkcji mail(), znaleziona w forum phpBB... */
function smtp_mail($mail_to, $subject, $message) {
global $smtp_host, $smtp_user, $smtp_pass, $email;

if($mail_to == '')
$error = 'Nie podałeś adresu odbiorcy!';
if(trim($subject) == '')
$error = 'Nie podałeś tematu wiadomości!';
if(trim($message) == '')
$error = 'Wiadomość jest pusta!';
if(!$socket = pfsockopen($smtp_host, 25, $errno, $errstr, 20))
$error = 'Nie mogę się połączyć z serwerem SMTP!';

if(!empty($error)){
echo "<B>Błąd: </B>$error<BR>n";
return false;
}

server_parse($socket, '220');

if(!empty($smtp_user) && !empty($smtp_pass)){
fputs($socket, 'EHLO '.$smtp_host."rn");
server_parse($socket, '250');
fputs($socket, "AUTH LOGINrn");
server_parse($socket, '334');
fputs($socket, base64_encode($smtp_user)."rn");
server_parse($socket, '334');
fputs($socket, base64_encode($smtp_pass)."rn");
server_parse($socket, '235');
}
else{
fputs($socket, 'HELO '.$smtp_host."rn");
server_parse($socket, '250');
}

fputs($socket, 'MAIL FROM: <' . $email . ">rn");
server_parse($socket, '250');

$mail_to_array = explode(',', $mail_to);


$to_header = 'To: ';
@reset($mail_to_array);

foreach($mail_to_array as $mail_to_address){
$mail_to_address = trim($mail_to_address);

if (preg_match('/[^ ]+@[^ ]+/', $mail_to_address)) {
fputs( $socket, "RCPT TO: <$mail_to_address>rn" );
server_parse($socket, '250');
}
$to_header .= (($mail_to_address != '') ? ', ' : '')."<$mail_to_address>";
}

$message = preg_replace("/(?<!r)n/si", "rn", $message);

fputs($socket, "DATArn");
server_parse($socket, "354");
fputs($socket, "Subject: $subjectrn");
fputs($socket, "$to_headerrn");
fputs($socket, "$headersrnrn");
fputs($socket, "$messagern");
fputs($socket, ".rn");
server_parse($socket, '250');
fputs($socket, "QUITrn");
fclose($socket);

return true;
}
function server_parse($socket, $response) {
while (substr($server_response,3,1)!=' ') {
if(!($server_response=fgets($socket, 256))) {
die('Nie mogę pobrać kodów zwróconych przez serwer.');
}
}
if(!(substr($server_response, 0, 3) == $response)) {
die('Wystąpił problem z wysyłaniem maili. Serwer zwrócił komunikat: '.$server_response);
}
}
?>[/php:1:661b6062cb]

Tak jak powiedziałem, maile sie ślą, ale z pustym polem od. Autoryzacja działa, bo jeśli wpisze niepoprawne hasło to serwer smtp zwraca odpowiedni komunikat. Wie ktoś dlaczego to pole może być puste ?
elessar
Elo. Z tego co zauwazylem nigdzie nie masz ustawianego naglowka wiadomosci (From). Dodaj srodkowa linijke do kodu:
Kod
   fputs($socket, "$to_headerrn");

   fputs($socket, "From: elessarrn");

   fputs($socket, "$headersrnrn");

i wszystko bedzie pieknie smigac:)
Cudi
Wielkie dzięki, a byłem pewny że za adres odpowiada ta linijka:
Kod
fputs($socket, 'MAIL FROM: <' . $email . ">rn");

Ale jak sie okazuje nie. Nie znam sie b.dobrze na wysyłce maili, a cały proces wysyłania tak jak już powiedziałem mam z phpBB, więc ten błąd był dla mnie nie do wykrycia biggrin.gif Jeszcze raz wielkie dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.