LINUX.ORG.RU
Ответ на: комментарий от xorik

Очень смешно. Для начала она sendmail использует, в поиски связаны именно нежеланием зависеть от набора дополнительного ПО сервера, наличия обратной зоны и прочих почтовых чудес.

r_asian ★☆☆
() автор топика
Ответ на: комментарий от Bad_Habit

Уж больно у него дофига зависимостей. Требуется это для совсем мелкой утилиты, и тащить с собой пир меня не радует :-(

r_asian ★☆☆
() автор топика
Ответ на: комментарий от r_asian

там много чего есть, включая документацию и примеры. для работы с smtp нужно только class.phpmailer && class.smtp.

isden ★★★★★
()
Ответ на: комментарий от isden

Всем спасибо. Примерно так и сделал, но с третим файлом. Ниженаписанного более чем достаточно, если поступиться одним требованием.

<?php
/**
 * Send messages using a local or remote SMTP server.
 * It supports TLS and SSL crypto.
 * @class Smtp
 * @author wooptoo, http://wooptoo.com
 * @license BSD
 */
class Smtp {
	public $server;
	public $port;
	public $crypto;
	public $user;
	public $pass;

	private $timeout = '45';
	private $localhost = 'localhost';
	private $nl = "\r\n";
	private $conn;

	/**
	 * Connect and Auth to server.
	 *
	 * @param string $server - remote server address or 'localhost'
	 * @param int $port
	 * @param string $crypto - can be null, ssl, tls
	 * @param string $user - optional for localhost server
	 * @param string $pass - optional for localhost server
	 */
	function __construct($server, $port, $crypto=null, $user=null, $pass=null) {
		$this->server = $server;
		$this->port = $port;
		$this->crypto = $crypto;
		$this->user = $user;
		$this->pass = $pass;

		$this->connect();
		$this->auth();
	}

	/**
	 * Connect to server.
	 */
	function connect() {
		$this->crypto = strtolower(trim($this->crypto));
		$this->server = strtolower(trim($this->server));

		if($this->crypto == 'ssl')
			$this->server = 'ssl://' . $this->server;
		$this->conn = fsockopen(
			$this->server, $this->port, $errno, $errstr, $this->timeout
		);
		fgets($this->conn);
		return;
	}

	/**
	 * Auth.
	 */
	function auth() {
		fputs($this->conn, 'HELO ' . $this->localhost . $this->nl);
		fgets($this->conn);
		if($this->crypto == 'tls') {
			fputs($this->conn, 'STARTTLS' . $this->nl);
			fgets($this->conn);
			stream_socket_enable_crypto(
				$this->conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT
			);
			fputs($this->conn, 'HELO ' . $this->localhost . $this->nl);
			fgets($this->conn);
		}
		if($this->server != 'localhost') {
			fputs($this->conn, 'AUTH LOGIN' . $this->nl);
			fgets($this->conn);
			fputs($this->conn, base64_encode($this->user) . $this->nl);
			fgets($this->conn);
			fputs($this->conn, base64_encode($this->pass) . $this->nl);
			fgets($this->conn);
		}
		return;
	}

	/**
	 * Send an email.
	 *
	 * @param string $from
	 * @param string $to
	 * @param string $subject
	 * @param string $message
	 * @param string $headers - optional
	 */
	function send($from, $to, $subject, $message, $headers=null) {
		echo "<pre>";
		fputs($this->conn, 'MAIL FROM: '. $from .''. $this->nl);
		echo htmlspecialchars(fgets($this->conn))."\n";
		fputs($this->conn, 'RCPT TO: <'. $to .'>'. $this->nl);
		echo htmlspecialchars(fgets($this->conn))."\n";
		fputs($this->conn, 'DATA'. $this->nl);
		echo htmlspecialchars(fgets($this->conn))."\n";
		fputs($this->conn,
			'From: '. $from .$this->nl.
			'To: '. $to .$this->nl.
			'Subject: '. $subject .$this->nl.
			$headers .$this->nl.
			$this->nl.
			$message . $this->nl.
			'.' .$this->nl
		);
		echo $answer = htmlspecialchars(fgets($this->conn))."\n";
		echo "</pre>";
		return (preg_match("/^250[^\d]+.*/", $answer)?1:false);
	}

	/**
	 * Quit and disconnect.
	 */
	function __destruct() {
		fputs($this->conn, 'QUIT' . $this->nl);
		fgets($this->conn);
		fclose($this->conn);
	}
}

?>

r_asian ★☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.