Autor Tema: ayuda con conexion smtp_auth  (Leído 5184 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
ayuda con conexion smtp_auth
« : mayo 31, 2007, 02:55:32 pm »
bueno es un probelma q tengo en una d mis paginas, el servidor no acepta el SMTP por cuestion de seguridad anti spam, entonces ellos usan SMTP_AUTH, quisiera saber como se haria una conexion SMTP_AUth, la cosa es q no tengo mucha experiensia en php pues hasta hace pcoo empeze a aprender aki les dejo el codigo q se usa para mandar los mensajes y todo y la conexion al smtp este mismo codigo es el q tengo q modifica, solo es la parte del codigo


Código: [Seleccionar]
class smtpSession {
var $conn;
var $info;

// Initializing Class
function smtpSession($host, $port = "25", $user = null, $pass = null) {
$this->info["host"] = $host;
$this->info["port"] = $port ? $port : "25";
$this->info["user"] = $user;
$this->info["pass"] = $pass;

if (class_exists("conf")) {
$this->info["from-mail"] = conf::getkey("core", "site.contact_mail");
$this->info["from-name"] = conf::getkey("core", "site.contact_mail");
} else {
$this->info["from-mail"] = GEKKO_SMTP_FROM_EMAIL;
$this->info["from-name"] = GEKKO_SMTP_FROM_NAME;
}

return $this->connect();
}
// Opens a connection with SMTP server
function connect() {
$this->conn = new remoteConnection($this->info["host"], $this->info["port"]);
if ($this->conn->status()) {
// connected, now saying hello!
return $this->login();
} else {
// there was a connection error for some strange reason
trigger_error("Couldn't open connection to SMTP server.",E_USER_ERROR);
return false;
}
}

// Sending creentials
function login() {

// Please read rfc0821 (or if you're too lazy just sniff a conversation between your e-mail client
// and one random smtp server)
$this->chat("220", "EHLO ".$this->info["host"]."\r\n");
$ehlo = $this->conn->read();

// getting server supported auth methods (read rfc2554)
// http://www.technoids.org/saslmech.html
if ($this->info["user"] && preg_match_all("/\d{3}-AUTH\s(.*)/", $ehlo, $match) && isset($match[1][0])) {
$methods = explode(" ", $match[1][0]);

if (in_array("LOGIN", $methods)) {
$this->conn->write("AUTH LOGIN\r\n");
$this->chat("334", base64_encode($this->info["user"])."\r\n");
$this->chat("334", base64_encode($this->info["pass"])."\r\n");
} else {
trigger_error("Unsupported SMTP AUTH type.", E_USER_ERROR);
}

if (!$this->chat("235", "", true))
trigger_error("Incorrect SMTP Username or Password.", E_USER_ERROR);
} else {
$this->chat("220", "HELO ".$this->info["host"]."\r\n");
$this->chat("250");
}

return true;
}
  // Sends an e-mail
function send($to, $subject, $message, $content_type = "text/plain", $headers = null) {

//
$this->conn->write("MAIL FROM: <".$this->info["from-mail"].">\r\n");

// can handle multiple recipients sepparated by commas
$ato = explode(",", $to);
foreach ($ato as $addr) {
$this->chat("250", "RCPT TO: <".trim($addr).">\r\n");
}

// telling server that the following data is a message
$this->chat("250", "DATA\r\n");
$this->chat("354");

// common headers
$this->conn->write("Mime-Version: 1.0\r\n");
$this->conn->write("Content-Type: $content_type\r\n");
$this->conn->write("Subject: $subject\r\n");
$this->conn->write("From: ".$this->info["from-name"]." <".$this->info["from-mail"].">\r\n");
$this->conn->write("To: <".$to.">\r\n");
$this->conn->write("Date: ".date("r")."\r\n");
$this->conn->write("X-Mailer: Gekko/".GEKKO_VERSION."\r\n");
$this->conn->write("X-Gekko-Tag: ".(isset($GLOBALS["USER"]["id"]) ? $GLOBALS["USER"]["id"] : "?")."@".IP_ADDR."\r\n");

if (GEKKO_SMTP_EXTRA_HEADERS)
$headers .= GEKKO_SMTP_EXTRA_HEADERS;

if ($headers)
$this->conn->write($headers);

// message body
$this->conn->write("\r\n");
$this->conn->write($message);
$this->conn->write("\r\n.\r\n");
// expecting confirmation
$this->chat("250");
}

/**
* chat(expecting, answer, hide_errors);
* Sends $answer to server after receiving the expected answer
*/
function chat($expecting, $answer = null, $hide_errors = false) {
// reading what server is saying
$data = $this->conn->read();
// checking if this was an expected response code (first 3 numbers)
if (substr(trim($data), 0, 3) == $expecting) {
if ($answer)
$this->conn->write($answer);
return true;
} else {
if ($hide_errors)
return false;
trigger_error("S: \"".trim($data)."\", expecting: \"$expecting\"", E_USER_ERROR);
}
}
// closing connection
function bye() {
$this->conn->write("QUIT\r\n");
$this->conn->close();
}
}
function sendmail($to, $subject, $message, $content_type = "text/plain", $headers = null) {
// preventing possible spam attacks
$to = trim(preg_replace("/[\r|\n](.*?)/", "", $to));
$subject = trim(preg_replace("/[\r|\n](.*?)/", "", $subject));
$message = trim(preg_replace("/[\r|\n]\.[\r|\n](.*?)/", "", $message));

if (conf::getkey("core", "smtp.enable")) {

$smtp = new smtpSession(conf::getkey("core", "smtp.host"), conf::getkey("core", "smtp.port"), conf::getkey("core", "smtp.user"), conf::getkey("core", "smtp.pass"));
if ($smtp->conn->status()) {
$smtp->send($to, $subject, $message, $content_type, $headers);
}
$smtp->bye();

} else {

if (!$headers)
$headers = "";

$headers .= "Mime-Version: 1.0\r\n";
$headers .= "Content-Type: $content_type\r\n";
$headers .= "From: ".conf::getkey("core", "site.name")." <".conf::getkey("core", "site.contact_mail").">\r\n";
$headers .= "X-Gekko-Tag: ".(isset($GLOBALS["USER"]["id"]) ? $GLOBALS["USER"]["id"] : "0")."@".IP_ADDR."\r\n";
$headers .= "Date: ".date("r")."\r\n";

mail($to, $subject, $message, trim($headers));
}

}

?>

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: ayuda con conexion smtp_auth
« Respuesta #1 : mayo 31, 2007, 05:13:33 pm »
usa la clase phpmailer para enviar ese tipo de correos

Código: [Seleccionar]
http://phpmailer.sourceforge.net/

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
Re: ayuda con conexion smtp_auth
« Respuesta #2 : mayo 31, 2007, 08:41:19 pm »
hola rdoggsv, gracias por tu respuesta, pero no puedo modificar el php.ini de el servidor porq no tengo acceso a el :D, entonces no se como le haria para ver eso, por lo q lei ese codigo se agrega el php.ini, y ellos usan el smtp_auth por eso no hay problema el problema es q el script de gekko no usa eso solo usan el smtp pero sin autentificacion entonces dicen q yo agregue el al script la conexion y envio d mails.

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: ayuda con conexion smtp_auth
« Respuesta #3 : junio 03, 2007, 03:06:22 pm »
phpmailer es una clase de php, esta en un archivo y vos la incluis en tu script para utilizarla ahi esta el ejemplo de como se usa en la pagina principal

Código: [Seleccionar]
require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();                                   // send via SMTP
$mail->Host     = "smtp1.site.com;smtp2.site.com"; // SMTP servers
$mail->SMTPAuth = true;     // turn on SMTP authentication
$mail->Username = "jswan";  // SMTP username
$mail->Password = "secret"; // SMTP password

$mail->From     = "from@email.com";
$mail->FromName = "Mailer";
$mail->AddAddress("josh@site.com","Josh Adams");
$mail->AddAddress("ellen@site.com");               // optional name
$mail->AddReplyTo("info@site.com","Information");

$mail->WordWrap = 50;                              // set word wrap
$mail->AddAttachment("/var/tmp/file.tar.gz");      // attachment
$mail->AddAttachment("/tmp/image.jpg", "new.jpg");
$mail->IsHTML(true);                               // send as HTML

$mail->Subject  =  "Here is the subject";
$mail->Body     =  "This is the <b>HTML body</b>";
$mail->AltBody  =  "This is the text-only body";

if(!$mail->Send())
{
   echo "Message was not sent <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Message has been sent";

No necesitas modificar nada del php.ini  :thumbsup:

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
Re: ayuda con conexion smtp_auth
« Respuesta #4 : junio 03, 2007, 10:00:15 pm »
probare creando un php para la pagina de contacto para q agarre ese php el form y a ver si envia los datos ingresados.

gracias, luego pongo si me sirvio, ahorita hago otra pagina web.

salu2

Desconectado JGuillen™

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3449
  • PHP,C#,MySQL,SQL
Re: ayuda con conexion smtp_auth
« Respuesta #5 : junio 11, 2007, 02:45:10 pm »
Yo ya he hecho lo que tu quieres... la verdad que ocupas de dos clases..una phpmailer.php  y la otra smtp.class.php... por si aun no la tienes vuelve a postear y me avisas por mp... y te mando las dos clases y las instrucciones que necesitas para porderlo llevar a acabo..!  :thumbsup:

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
Re: ayuda con conexion smtp_auth
« Respuesta #6 : junio 24, 2007, 09:16:15 pm »
no me vendrian mal jguillen ya q aun no hago funcionar esa cosa.

me avisas por msn

Desconectado fermarroquin

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3503
    • Fernando Marroquín
Re: ayuda con conexion smtp_auth
« Respuesta #7 : junio 24, 2007, 09:18:19 pm »
Yo ya he hecho lo que tu quieres... la verdad que ocupas de dos clases..una phpmailer.php  y la otra smtp.class.php... por si aun no la tienes vuelve a postear y me avisas por mp... y te mando las dos clases y las instrucciones que necesitas para porderlo llevar a acabo..!  :thumbsup:

Sería bueno ke lo postearas aca para todos aprender.  :thumbsup:
Salvadoreño. Arquitecto. Nocturno. Apasionado. Geek. Hago política. Oveja negra. Dejando la Coca-Cola. Tomo fotos. Astronauta y saxofonista frustrado. En Twitter soy @FerMarroquin.

Desconectado JGuillen™

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3449
  • PHP,C#,MySQL,SQL
Re: ayuda con conexion smtp_auth
« Respuesta #8 : junio 25, 2007, 10:21:08 am »
Nota: Esto esto lo hicimos mi hermano y yo  y nos funciono..! aca les va las clases ya modificadas... :thumbsup:

Hey moyo18 el codigo que te dio rdoggsv esta bueno solo ocupas estas clases q te pongo porq hay q modificiar ciertas cosillas.. y a la vez habilitar el OPENSL en php para esto tenes que hacer lo siguiente..!

1. Copiar los archivos php_openssl.dll libeay32.dll ssleay32.dll C:\Windows\System32.
            ( Estos archivos se encuentran donde hallas instalado php (.....\php\ext) )

2. Editar php.ini descomentariar php_openssl.dll

y es todo probalo si no me avisas por msn.:!  :thumbsup:



 :big_boss:


Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
Re: ayuda con conexion smtp_auth
« Respuesta #9 : junio 25, 2007, 10:20:23 pm »
Citar
1. Copiar los archivos php_openssl.dll libeay32.dll ssleay32.dll C:\Windows\System32.
            ( Estos archivos se encuentran donde hallas instalado php (.....\php\ext) )

2. Editar php.ini descomentariar php_openssl.dll

haya dos pequeñisomos problemas con eso, primero no tengo instlado el servidor en mi pc, es dond esta PORTALDELPROGRAMADOR con ese me da el error no se pueden enviar correos desd el portal porq el servidor no permite si no llevan eso.

el segundo no puedo modificar el php.ini asi q como le hago LOL

salu2

Desconectado rcguillen

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 2320
Re: ayuda con conexion smtp_auth
« Respuesta #10 : junio 27, 2007, 08:27:32 am »
Q posibilidades hay q te comuniques con ellos (Los dueños del Servidor), y hacerles ver el problema q tienes y la necesidad de usar esas clases y asi para q ellos te lo habiliten en su servidor PHP.
-:Rcguillen-NoMercy:-
-:Es inutil hacer cualquier cosa a prueba de tontos, porque los tontos son muy ingeniosos:-

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: ayuda con conexion smtp_auth
« Respuesta #11 : junio 27, 2007, 10:40:27 am »
Sinceramente no entiendo moyo porque todavia no haces uso de la clase que te mencione, ahi esta todo lo que necesitas  :'(

Si queres dame los datos de cual es el server y te voy a pegar el codigo entonces ya hecho :)