導航:首頁 > 編程語言 > linuxsmtpphp

linuxsmtpphp

發布時間:2022-05-31 00:12:15

A. php用smtp 發送郵件失敗提示無法連接到主機

PHPMailer是一個郵件發送插件有很多朋友使用它來發郵件,但也有不少朋友在使用期PHPMailer發郵件時就碰到」SMTP 錯誤:無法連接到 SMTP 主機「錯誤了,出現這種問題我們從幾個點來分享,一個是郵箱配置有問題,另一個是我們的php.ini環境中有些函數沒開啟導致的,下面我來給各位詳細介紹一下問題的排除技巧。

方法2:使用stream_socket_client函數

一般fsockopen()被禁,pfsockopen也有可能被禁,所以這里介紹另一個函數stream_socket_client()。

stream_socket_client的參數與fsockopen有所不同,所以代碼要修改為:

$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, $tval);

這樣就可以了。

B. linux 下 用phpmailer類smtp發送郵件始終不成功,提示:ERROR: Failed to connect to server: (0)

...你都解決了...汗

C. 學習php發送郵件的時候報錯SMTP Error: Could not authenticate.是什麼原因

可能的原因有2個
1、smtp驗證沒通過,就是smtp server 的用戶名和密碼不正確
2、Linux系統中的saslauthd服務配置出錯,文件地址:/etc/sysconfig/saslauthd
文件將裡面的內容
FLAGS= # 此處應該為空,修改前為 FLAGS="r"

D. linux下測試sendmail並通過php實現SMTP發信

首先,主機的DNS什麼的要能連通。在把sendmail 服務啟來。
然後:
1、輸入 mail -s "zhuti" [email protected]
2、輸入 郵件內容
3、輸入 .
4、Cc:是抄送的意思,沒有就回車。
5、去[email protected] 收郵件吧

PHP 直接寫調用。我不回寫。上網搜吧,應該有。

E. 如何通過php發送郵件php的mail函數不能用!

支持mail的伺服器 一般都是linux的 國內的好像不多
自己的電腦安裝mail伺服器不能往外發的 呵呵 可以自己測試用
現在很多管理系統都是用fsocketopen方式連接郵件伺服器並發送郵件的 可以使用163 126的郵箱 網上有一些模型的 就像是好多管理系統後台讓填入用戶名和密碼 就能群發一樣 如果你不介意的話 給你轉發一個以前我自己改過的可以利用fsocketopen方式群發或者單發email的一共三個文件
MailClass.php 》》》》》》
<?php
class Smtp
{
var $host; //主機
var $port; //埠 一般為25
var $user; //SMTP認證的帳號
var $pass; //認證密碼
var $debug = false; //是否顯示和伺服器會話信息?
var $conn;
var $result_str; //結果
var $in; //客戶機發送的命令
var $from; //收件人收到郵件顯示的源信箱
var $email; //真實的地址
var $to; //目標信箱
var $subject; //主題
var $body; //內容
var $error;
var $All;
function Smtp($array)
{
$this->host = $array['host'];
$this->port = $array['port'];
$this->email= $array['trueemail'];
$this->from = $array['from'];
$this->user = base64_encode($array['username']);
$this->pass = base64_encode($array['password']);
$this->debug = $array['debug'];
$this->socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);

if($this->socket){
$this->result_str = "創建SOCKET:".socket_strerror(socket_last_error());
$this->debug_show($this->result_str);
}
else
die("初始化失敗,請檢查您的網路連接和參數");

$this->conn = socket_connect($this->socket,$this->host,$this->port);
if($this->conn){
$this->result_str = "創建SOCKET連接:".socket_strerror(socket_last_error());
$this->debug_show($this->result_str);
}
else
die("初始化失敗,請檢查您的網路連接和參數");

$this->result_str = "伺服器應答:<font color=#cc0000>".socket_read ($this->socket, 1024)."</font>";
$this->debug_show($this->result_str);

}

function debug_show($str)
{
if($this->debug)
{
echo $str."<p>\r\n";
}
}

function setmail($to,$subject,$body){
$this->to = $to;
$this->subject = $subject;
$this->body = $body;

$All ="Content-type:text/html;charset=gb2312\r\n"; //郵件的編碼方式可以根據自己的需要改
$All .= "From:".$this->from."\r\n";
$All .= "To:".$this->to."\r\n";
$All .= "Subject:".$this->subject."\r\n\r\n";
$All .= $this->body;
$this->All = $All;
}
/**
* 發送郵件部分
* 接收郵箱數組
*/
function send($toarray,$subject,$body)
{
//以下是和伺服器會話
$this->in = "EHLO HELO\r\n";
$this->docommand();

$this->in = "AUTH LOGIN\r\n";
$this->docommand();

$this->in = $this->user."\r\n";
$this->docommand();

$this->in = $this->pass."\r\n";
$this->docommand();

foreach( $toarray as $to ) {
$this -> setmail($to,$subject,$body);

$this->in = "RSET\r\n";
$this->docommand();

$this->in = "MAIL FROM:<".$this->email.">\r\n";
$this->docommand();

$this->in = "RCPT TO:<".$this->to.">\r\n";
$this->docommand();

$this->in = "DATA\r\n";
$this->docommand();

$this->in = $this->All."\r\n.\r\n";
$this->docommand();
}

$this->in = "QUIT\r\n";
$this->docommand();

//結束,關閉連接
}
function docommand()
{
socket_write ($this->socket, $this->in, strlen ($this->in));
$this->debug_show("Client Action:".$this->in);
$this->result_str = "Server:<font color=#cc0000>".socket_read ($this->socket, 1024)."</font>";
$this->debug_show($this->result_str);
}
}
?>

MailConfig.inc.php 》》》》》》

<?php
$mailconfig['host'] = "smtp.126.com"; //主機
$mailconfig['port'] = "25"; //埠 一般為25
$mailconfig['trueemail'] = "[email protected]"; //真實的地址
$mailconfig['username'] = "mhz1600"; //SMTP認證的帳號
$mailconfig['password'] = "*****"; //改成自己的
$mailconfig['debug'] = false; //是否顯示和伺服器會話信息?
$mailconfig['from'] = "[email protected]"; //顯示給用戶的發件人

include_once "MailClass.php";
set_time_limit(180);
?>

SendDemo.php 》》》》》》
<?php
include_once "MailConfig.inc.php";

//簡單的臨時碼驗證 當前時間(到小時)的驗證碼
//if( empty($_GET['s']) || $_GET['s'] != md5(date('Y-m-d-H',time())) ) {header("http/1.1 404"); die('');}

//發送email
if( isset($_POST['sendmail']) ) {
if( isset($_POST['from']) ) $mailconfig['from'] = $_POST['from'];
$smtp = new Smtp($mailconfig);
$title = $_POST['title'];
//獲取post的email正文
if( get_magic_quotes_gpc() ) $message = $_POST['message'];
else $message = addslashes($_POST['message']);

//從email列表/文檔中分離出所有的email地址
$pregstr = "@[a-zA-Z0-9\_][0-9a-zA-Z\.\-\_]+\@[0-aA-Za-z\-\_]+\.[0-9a-zA-Z\.\-\_]+@is";
$temp = array();
preg_match_all($pregstr,$_POST['emails'],$temp);
$toarray = $temp[0];
//var_mp($toarray);

$smtp->send($toarray,$title,$message);

die("操作完成!<A href=".$_SERVER['PHP_SELF']."?s=".md5(date('Y-m-d-H',time())).">繼續發送其他</a> <a href=# onclick=window.close()>關閉</a>");
}
else {
if( isset($_POST['emails']) ) {
if( is_array($_POST['emails']) )
$emails = implode("\t",$_POST['emails']);
else
$emails = $_POST['emails'];
}
else $emails = "";
?>
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><style type="text/css">
<!--
body,td,th {
font-size: 12px;
}
-->
</style></head>

<body>
<form id="form1" name="form1" method="post" action="">
<table width="600" border="1" align="center" cellpadding="3" cellspacing="0" bordercolordark="#FFFFFF" bordercolorlight="#eeeeee">
<tr>
<td width="66">發件人:</td>
<td width="516"><input name="from" type="text" value="<?php echo $mailconfig['from']; ?>"> 可以直接修改mailconfig文件中的email</td>
</tr>
<tr>
<td>郵件標題:</td>
<td><input name="title" type="text" value="郵件群發測試標題!" size="60"></td>
</tr>
<tr>
<td>收件人:<br></td>
<td><textarea name="emails" cols="60" rows="5"><?php echo $emails; ?></textarea></td>
</tr>
<tr>
<td>郵件正文:<br>
【html】</td>
<td><textarea name="message" cols="60" rows="10">郵件群發測試!謝謝~!</textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="sendmail" value=" 發送郵件 "> </td>
</tr>
</table>
</form>
<?
}
?>
</body>
</html>

使用方式 運行senddemo.php就行 確定本地或者伺服器開啟了fsocketopen支持 在輸入框可以多種格式的的輸入很多email 程序用正則表達式匹配出所有的email地址 通過伺服器循環對話的方式不斷的發送郵件 看看那個demo的流程就明白了
【鄭重聲明:mailclass修改自網上的模型 其他本人原創,版權不究 歡迎分享】

+---------------------廣告-------------------------+
那一天:回憶,讓生活更美好
獨享人生中那個特別的日子,記錄從那一天開始的幸福
http://www.nayitian.net
期待您的加入,歡迎提供寶貴的意見建議
+--------------------------------------------------+

+--------------------補充--------------------+
發送郵件的伺服器(smtp)並不是網址 126發送郵件的伺服器是 smtp.126.com 網易163的發送郵件伺服器是 smtp.163.com 所有郵箱對於這個都有說明的 還有一個就是能夠使用這個功能的好象新注冊的郵箱不太好用 因為網易在2006年10對郵箱進行過調整 在此之前注冊的都沒問題 在這之後注冊的好像開通一些其他的功能並且使用了一段時間才行的
smtp伺服器的鏈接可以在命令提示行下測試 就是使用上面的命令:
首先 telnet smtp.126.com 25
因為smtp使用的25埠提供服務的 然後就會看到
220 126.com Anti-spam GT for Coremail System (126com[071018])
輸入 EHLO HELO
伺服器返回
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME

輸入 AUTH LOGIN
伺服器返回
334 dXNlcm5hbWU6
然後再輸入通過base64加密的用戶名和密碼 就能通過命令來和伺服器對話 包括發送郵件等功能

具體的如果有興趣更多命令自己查一下
這個php的程序就是模擬這個功能來實現的

如果你用telnet直接連不上的話 說明伺服器是錯誤的 。。

F. PHP使用郵件類發送郵件問題

我也遇到這一樣的問題了,一樣的代碼,請問你的問題解決了嗎?

G. 我的vps裡面裝的網站都不能通過smtp發郵件,我用php探針測試,顯示的是Socket不支持

那你就選擇用函數嘛~
安裝一下sendmail
yum install sendmail

H. 用php和stmppash發送郵件的區別

一、使用PHP內置的mail()函數
看了一下手冊,就直接開始寫代碼了,如下

[php] view plain
<?php
$to = "[email protected]"; //收件人
$subject = "Test"; //主題
$message = "This is a test mail!"; //正文
mail($to,$subject,$message);

結果就直接報錯,如下:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() inD:/www/Zend/email/email.php on line 10

看來本地需要有SMTP伺服器,那就使用別人的試試吧,又改了下代碼:

[php] view plain
<?php
$to = "[email protected]";//收件人
$subject = "Test";//郵件主題
$message = "This is a test mail!";//郵件正文
ini_set('SMTP','smtp.163.com');//發件SMTP伺服器
ini_set('smtp_port',25);//發件SMTP伺服器埠
ini_set('sendmail_from',"[email protected]");//發件人郵箱
mail($to,$subject,$message);

結果還是錯誤:
Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line9

看來是需要驗證信息,怎麼寫驗證信息呢?在哪裡配置呢?上網找了半天也沒找出個所以然,最後看了別人一些技術文章後得出結論(由於對SMTP郵件什麼的不是非常了解,所以也不知道這個結論是否是正確的):使用mail()函數發送郵件就必須要有一台無需SMTP驗證就可以發信的郵件伺服器。但現在的SMTP郵件伺服器基本上都是需要驗證的,所以要想使用它發郵件就只能自己在本地搭一個不需要驗證的SMTP伺服器。這就比較麻煩了,我是不想整,有興趣的同學可以自己試試搭一個,用windows自帶的IIS就可以,或者從網上下載其他的SMTP伺服器軟體,我就不多說。

結論:使用mail()函數發送郵件,就必須要有一台不需要驗證的SMTP伺服器。
這樣的話配置工作會多一點,但是使用的時候就比較省事了,幾行代碼就可以。

二、使用封裝SMTP協議的郵件類

這種方法就比較常見了,尤其對於廣大自己沒有伺服器,從網上購買虛擬主機的同學,
第一種方法不現實,所以還是自己使用SMTP協議來發送郵件吧。
不過要完成這項工作的話,就需要你對SMTP協議有一定的了解,喜歡事必躬親的同學可以自己動手寫一個,喜歡拿來主義的同學就可以從網上下載了,有很多。
不過我比較推薦使用PEAR擴展中的Mail類,功能強大:可以支持純文本、HTML格式的郵件;各欄位都可設置編碼,正確配置不會出現中文亂碼情況;可以支持附件等等。
在伺服器可以使用 pear install Mail 命令快速安裝,沒有足夠伺服器許可權的同學也可以直接下載類的PHP源碼包含進來就可以了。
註:Mail類依賴 Net/SMTP.php 和 Mail/mime.php ,要一塊下載,使用時一塊包含進來。
詳細安裝方法可以在官網查看,http://pear.php.net/package/Mail。

下面我舉例說明一下在Mail類發送郵件的方法吧,網上其他SMTP郵件類使用方法一塊也類似,可以參考:

[php] view plain
<?php

// Pear Mail 擴展
require_once('Mail.php');
require_once('Mail/mime.php');
require_once('Net/SMTP.php');

$smtpinfo = array();
$smtpinfo["host"] = "smtp.163.com";//SMTP伺服器
$smtpinfo["port"] = "25"; //SMTP伺服器埠
$smtpinfo["username"] = "[email protected]"; //發件人郵箱
$smtpinfo["password"] = "password";//發件人郵箱密碼
$smtpinfo["timeout"] = 10;//網路超時時間,秒
$smtpinfo["auth"] = true;//登錄驗證
//$smtpinfo["debug"] = true;//調試模式

// 收件人列表
$mailAddr = array('[email protected]');

// 發件人顯示信息
$from = "Name <[email protected]>";

// 收件人顯示信息
$to = implode(',',$mailAddr);

// 郵件標題
$subject = "這是一封測試郵件";

// 郵件正文
$content = "<h3>隨便寫點什麼</h3>";

// 郵件正文類型,格式和編碼
$contentType = "text/html; charset=utf-8";

//換行符號 Linux: \n Windows: \r\n
$crlf = "\n";
$mime = new Mail_mime($crlf);
$mime->setHTMLBody($content);

$param['text_charset'] = 'utf-8';
$param['html_charset'] = 'utf-8';
$param['head_charset'] = 'utf-8';
$body = $mime->get($param);

$headers = array();
$headers["From"] = $from;
$headers["To"] = $to;
$headers["Subject"] = $subject;
$headers["Content-Type"] = $contentType;
$headers = $mime->headers($headers);

$smtp =& Mail::factory("smtp", $smtpinfo);

$mail = $smtp->send($mailAddr, $headers, $body);
$smtp->disconnect();

if (PEAR::isError($mail)) {
//發送失敗
echo 'Email sending failed: ' . $mail->getMessage()."\n";
}
else{
//發送成功
echo "success!\n";
}

如果從網上找的SMTP類都是高度封裝的,所以使用起來比上面會更簡單,但使用方法都是比較相似的。

結論:這種方式發送郵件無需裝任何軟體,只需要包含進來一個PHP類,然後多寫幾行配置代碼,就可以了。並且網上有很多示例的代碼,很多時候只要復制過來然後修改個別的幾個參數就可以用了,所以會很方便,推薦使用此方法。

I. 要使用SMTP或PHP mail函數發送郵件需滿足什麼條件(伺服器發不了郵件..囧rz)

關於查看埠狀態:

你應該可以得到伺服器的IP地址吧,得不到也沒關系,應該有域名才對。

然後使用你的本機telnet你的伺服器25埠,看是否有數據返回

具體做法是運行->CMD->輸入命令telnet xxx.com 25

如果你使用的是win7系統,沒有安裝telnet系統功能的話,可以到以下位置打開:

控制面板->程序和功能->(左側列表最下方)打開或關閉windows功能->Telenet客戶端->打勾後確定

待安裝好後,重啟cmd,重新嘗試第一個操作

如果遲遲保持在「正在連接....」狀態好一會,而後出現「無法打開到主機的連接。在埠 25:連接失敗,那證明伺服器沒有開通25口,如果你用的是VPS,埠好像可以自行配置,畢竟是Linux系統,我不太會配置,你自行找相關的方法,如果是虛擬伺服器,那就不行了,不過你可以再弄個企業郵局,或者使用申請的其它郵箱,比如網易的、新浪的、gmail的等等,依然可以使用郵件功能,但就不能使用PHP內置的mail函數了。

具體使用遠程SMTP伺服器來發送郵件的方法,你可以參考我以前回答的問題,你也可以使用現有的許多mail類庫實現

我以前回答過的問題:http://..com/question/478821120.html?oldq=1

另外,使用telnet功能不順手,可以網路一款專業埠刺探軟體:superscan

J. 我在Linux系統PHP里使用phpmailer這個類發郵件總提示:SMTP Error: Could not connect to SMTP host

SMTP Error: Could not connect to SMTP host意思為:
SMTP錯誤:不能連接到SMTP主機
phpmailer可能是沒安裝具體看下文給你參考資料:
http://ke..com/view/2341560.htm

閱讀全文

與linuxsmtpphp相關的資料

熱點內容
加密媒體怎麼輸密碼 瀏覽:161
方舟如何刪除伺服器數據 瀏覽:600
用閱讀app怎麼看18 瀏覽:689
gn文件編譯 瀏覽:783
酷閃加密系統 瀏覽:820
區塊鏈數據加密 瀏覽:389
3d命令集 瀏覽:289
單片機的智能產品工廠里有 瀏覽:300
事業單位程序員有必要去嗎 瀏覽:583
人工智慧訓練小鳥python 瀏覽:132
怎樣把兩個pdf合並成一個 瀏覽:681
什麼app帶仿製圖章 瀏覽:420
單片機CJNE什麼意思 瀏覽:569
廊坊伺服器是什麼 瀏覽:763
客戶解壓要打欠條還是收據 瀏覽:774
通過app組件啟動有什麼壞處 瀏覽:775
不屬於國產密碼演算法 瀏覽:861
單片機LED顯示字型檔 瀏覽:353
日本文件夾品牌十大名牌 瀏覽:397
靜脈壓縮襪和打底褲的區別 瀏覽:345