【问题标题】:PHP @mail returning falsePHP @mail 返回 false
【发布时间】:2013-04-30 09:12:39
【问题描述】:

此代码未发送电子邮件,我没有收到任何错误说明原因。应该如何解决这个问题?

    $uid = md5(uniqid(time()));
    $headers= "From: " . $this->fromAddress . "  <" . $this->fromName . ">\r\n";
    $headers.= "Reply-To: " . $this->fromAddress . " <" . $this->fromName . ">\r\n";
    if ($this->cc != "") { $headers .= "CC: ".$this->cc."\r\n"; }
    if ($this->bcc != "") { $headers .= "BCC: ".$this->bcc."\r\n"; }
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
    $headers .= "This is a multi-part message in MIME format.\r\n";
    $headers .= "--" . $uid . "\r\n";
    $headers .= "Content-type:text/html; charset=iso-8859-1\r\n";
    $headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $headers .= $this->body . "\r\n\r\n";
    $headers .= "--".$uid."--";

    $mail_sent = @mail($this->toAddress,$this->subject,'',$headers);

    if (!$mail_sent) {
        throw new Exception('Email failed to send');
    }

这里的结果是抛出异常,没有别的。所以@mail 返回错误。没什么可继续的......

顺便说一句,邮件服务器是本地主机(不需要身份验证),它可以使用类似的代码很好地发送电子邮件。

我已将此代码与成功的代码进行了比较,虽然我显然没有看到关键部分,但在我看来,所有差异都与核心电子邮件发送代码无关。

php 邮件日志如下:

mail() on [C:\Users\Owner\PhpstormProjects\CRM\classes\CompanyName\Email.php:75]: To: lowens@companyname.com -- Headers: From: lowens@companyname.com  <lowens@companyname.com>  Reply-To: lowens@companyname.com <lowens@companyname.com>  MIME-Version: 1.0  Content-Type: multipart/mixed; boundary="7feeadcdbd29ed703423feb85438c14b"    This is a multi-part message in MIME format.  --7feeadcdbd29ed703423feb85438c14b  Content-type:text/html; charset=iso-8859-1  Content-Transfer-Encoding: 7bit    asdfasdf    --7feeadcdbd29ed703423feb85438c14b--

【问题讨论】:

  • 删除@,这样您就可以真正看到有用的错误消息。
  • 谢谢。不,我不知道 @ 做了什么。
  • 您是否确实检查过$this-&gt;fromAddress 包含有效的电子邮件地址?如果没有,您将接受邮件标头注入。
  • fromAddress 是在我自己的一种调用方法中静态指定的。无需担心注射。

标签: php email mime


【解决方案1】:

来自manual

at 符号 (@)。当附加到 PHP 中的表达式时,该表达式可能生成的任何错误消息都将被忽略。

删除@,任何错误消息都不会被忽略。

【讨论】:

    【解决方案2】:
    <title>.:TheJokerHack:.</title><body bgcolor="#F2F2F2">
    <center>
    
    <link href='http://fonts.googleapis.com/css?family=Squada+One' rel='stylesheet' type='text/css'>
    <link href='http://fonts.googleapis.com/css?family=Aldrich' rel='stylesheet' type='text/css' />
    <link href='http://fonts.googleapis.com/css?family=Orbitron:700' rel='stylesheet' type='text/css'>
    <!-- no txt inicio -->
    <script language="Javascript">
    <!-- Begin
    function disableselect(e){
    return false
    }
    function reEnable(){
    return true
    }
    document.onselectstart=new Function ("return false")
    if (window.sidebar){
    document.onmousedown=disableselect
    document.onclick=reEnable
    }
    // End -->
    </script>
    <!-- no txt fin -->
    <META http-equiv=Content-Type content="text/html; charset=windows-1254">
    <STYLE type=text/css>BODY {
      SCROLLBAR-FACE-COLOR: #000000; SCROLLBAR-HIGHLIGHT-COLOR: #000000; SCROLLBAR-SHADOW-COLOR: #000000; SCROLLBAR-3DLIGHT-COLOR: #000000; SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-TRACK-COLOR: #ffffff; FONT-FAMILY: Verdana; SCROLLBAR-DARKSHADOW-COLOR: #000000
    }
    .Estilo10 {
      COLOR: #ffffff; FONT-FAMILY: Haettenschweiler
    }
    .Estilo8 {
      FONT-SIZE: 10px; COLOR: #ffffff; FONT-FAMILY: Haettenschweiler
    }
    </STYLE>
    <SCRIPT LANGUAGE="JavaScript">
    /*
    An object-oriented Typing Text script, to allow for multiple instances.
    A script that causes any text inside any text element to be "typed out", one letter at a time. Note that any HTML tags will not be included in the typed output, to prevent them from causing problems. Tested in Firefox v1.5.0.1, Opera v8.52, Konqueror v3.5.1, and IE v6.
    Browsers that do not support this script will simply see the text fully displayed from the start, including any HTML tags.
    
    Functions defined:
      TypingText(element, [interval = 100,] [cursor = "",] [finishedCallback = function(){return}]):
        Create a new TypingText object around the given element.  Optionally
        specify a delay between characters of interval milliseconds.
        cursor allows users to specify some HTML to be appended to the end of
        the string whilst typing.  Optionally, can also be a function which
        accepts the current text as an argument.  This allows the user to
        create a "dynamic cursor" which changes depending on the latest character
        or the current length of the string.
        finishedCallback allows advanced scripters to supply a function
        to be executed on finishing.  The function must accept no arguments.
    
      TypingText.run():
        Run the effect.
    
      static TypingText.runAll():
        Run all TypingText-enabled objects on the page.
    */
    
    TypingText = function(element, interval, cursor, finishedCallback) {
      if((typeof document.getElementById == "undefined") || (typeof element.innerHTML == "undefined")) {
        this.running = true;  // Never run.
        return;
      }
      this.element = element;
      this.finishedCallback = (finishedCallback ? finishedCallback : function() { return; });
      this.interval = (typeof interval == "undefined" ? 20 : interval);
      this.origText = this.element.innerHTML;
      this.unparsedOrigText = this.origText;
      this.cursor = (cursor ? cursor : "");
      this.currentText = "";
      this.currentChar = 0;
      this.element.typingText = this;
      if(this.element.id == "") this.element.id = "typingtext" + TypingText.currentIndex++;
      TypingText.all.push(this);
      this.running = false;
      this.inTag = false;
      this.tagBuffer = "";
      this.inHTMLEntity = false;
      this.HTMLEntityBuffer = "";
    }
    TypingText.all = new Array();
    TypingText.currentIndex = 0;
    TypingText.runAll = function() {
      for(var i = 0; i < TypingText.all.length; i++) TypingText.all[i].run();
    }
    TypingText.prototype.run = function() {
     if(this.running) return;
     if(typeof this.origText == "undefined") {
       setTimeout("document.getElementById('" + this.element.id + "').typingText.run()", this.interval);  // We haven't finished loading yet.  Have patience.
       return;
     }
     if(this.currentText == "") this.element.innerHTML = "";
    //  this.origText = this.origText.replace(/<([^<])*>/, "");     // Strip HTML from text.
      if(this.currentChar < this.origText.length) {
       if(this.origText.charAt(this.currentChar) == "<" && !this.inTag) {
         this.tagBuffer = "<";
         this.inTag = true;
         this.currentChar++;
         this.run();
         return;
       } else if(this.origText.charAt(this.currentChar) == ">" && this.inTag) {
         this.tagBuffer += ">";
          this.inTag = false;
          this.currentText += this.tagBuffer;
          this.currentChar++;
          this.run();
          return;
        } else if(this.inTag) {
          this.tagBuffer += this.origText.charAt(this.currentChar);
          this.currentChar++;
          this.run();
          return;
        } else if(this.origText.charAt(this.currentChar) == "&" && !this.inHTMLEntity) {
         this.HTMLEntityBuffer = "&";
          this.inHTMLEntity = true;
          this.currentChar++;
          this.run();
          return;
        } else if(this.origText.charAt(this.currentChar) == ";" && this.inHTMLEntity) {
         this.HTMLEntityBuffer += ";";
          this.inHTMLEntity = false;
          this.currentText += this.HTMLEntityBuffer;
          this.currentChar++;
          this.run();
          return;
        } else if(this.inHTMLEntity) {
          this.HTMLEntityBuffer += this.origText.charAt(this.currentChar);
          this.currentChar++;
          this.run();
          return;
        } else {
          this.currentText += this.origText.charAt(this.currentChar);
        }
        this.element.innerHTML = this.currentText;
        this.element.innerHTML += (this.currentChar < this.origText.length - 1 ? (typeof this.cursor == "function" ? this.cursor(this.currentText) : this.cursor) : "");
       this.currentChar++;
       setTimeout("document.getElementById('" + this.element.id + "').typingText.run()", this.interval);
     } else {
     this.currentText = "";
     this.currentChar = 0;
           this.running = false;
           this.finishedCallback();
     }
    }
    </script>
    <style>
    td{align: center; font-family: Bradley Hand ITC; font-size: 18pt; color: black}
    a{align: center; font-family: Bradley Hand ITC; font-size: 12pt; color: red}
    
    
    </style>
    <!-- facebook inicio -->
    <style>
    #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
    #cboxOverlay{position:fixed; width:100%; height:100%;}
    #cboxMiddleLeft, #cboxBottomLeft{clear:left;}
    #cboxContent{position:relative;}
    #cboxLoadedContent{overflow:auto;}
    #cboxTitle{margin:0;}
    #cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;}
    #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
    .cboxPhoto{float:left; margin:auto; border:0; display:block;}
    .cboxIframe{width:100%; height:100%; display:block; border:0;}
    /*User Style: Cambie los siguientes estilos para modificar el aspecto de la Caja de color. Est&#65533;n ordenados y con pesta&#65533;as en una forma que representa la anidaci&#65533;n de el c&#65533;digo HTML generado.*/
    #cboxOverlay{background:#000;opacity:0.5 !important;}
    #colorbox{
    box-shadow:0 0 15px rgba(0,0,0,0.4);
    -moz-box-shadow:0 0 15px rgba(0,0,0,0.4);
    -webkit-box-shadow:0 0 15px rgba(0,0,0,0.4);
    }
    #cboxTopLeft{width:14px; height:14px; background:url(http://1.bp.blogspot.com/-FiJ_Xz7txEg/Txrt0sy1TiI/AAAAAAAAFWk/Llzvkeyy_J8/s1600/controls.png) no-repeat 0 0;}
    #cboxTopCenter{height:14px; background:url(http://1.bp.blogspot.com/-TcJGMnSfOCY/TxrtzzHDLVI/AAAAAAAAFWc/mdndgrisRuA/s1600/border.png) repeat-x top left;}
    #cboxTopRight{width:14px; height:14px; background:url(http://1.bp.blogspot.com/-FiJ_Xz7txEg/Txrt0sy1TiI/AAAAAAAAFWk/Llzvkeyy_J8/s1600/controls.png) no-repeat -36px 0;}
    #cboxBottomLeft{width:14px; height:43px; background:url(http://1.bp.blogspot.com/-FiJ_Xz7txEg/Txrt0sy1TiI/AAAAAAAAFWk/Llzvkeyy_J8/s1600/controls.png) no-repeat 0 -32px;}
    #cboxBottomCenter{height:43px; background:url(http://1.bp.blogspot.com/-TcJGMnSfOCY/TxrtzzHDLVI/AAAAAAAAFWc/mdndgrisRuA/s1600/border.png) repeat-x bottom left;}
    #cboxBottomRight{width:14px; height:43px; background:url(http://1.bp.blogspot.com/-FiJ_Xz7txEg/Txrt0sy1TiI/AAAAAAAAFWk/Llzvkeyy_J8/s1600/controls.png) no-repeat -36px -32px;}
    #cboxMiddleLeft{width:14px; background:url(http://1.bp.blogspot.com/-FiJ_Xz7txEg/Txrt0sy1TiI/AAAAAAAAFWk/Llzvkeyy_J8/s1600/controls.png) repeat-y -175px 0;}
    #cboxMiddleRight{width:14px; background:url(http://1.bp.blogspot.com/-FiJ_Xz7txEg/Txrt0sy1TiI/AAAAAAAAFWk/Llzvkeyy_J8/s1600/controls.png) repeat-y -211px 0;}
    #cboxContent{background:#fff; overflow:visible;}
    #cboxLoadedContent{margin-bottom:5px;}
    #cboxLoadingOverlay{background:url(http://1.bp.blogspot.com/-PPvu-446sn4/Txrt1QsGH1I/AAAAAAAAFWw/_jWYVoR1HX8/s1600/loading-background.png) no-repeat center center;}
    #cboxLoadingGraphic{background:url(http://1.bp.blogspot.com/-31strss_1-E/Txrt1J6NThI/AAAAAAAAFWo/4P12CJPj924/s1600/loading.gif) no-repeat center center;}
    #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
    #cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
    #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(http://1.bp.blogspot.com/-FiJ_Xz7txEg/Txrt0sy1TiI/AAAAAAAAFWk/Llzvkeyy_J8/s1600/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
    #cboxPrevious{left:0px; background-position: -51px -25px;}
    #cboxPrevious.hover{background-position:-51px 0px;}
    #cboxNext{left:27px; background-position:-75px -25px;}
    #cboxNext.hover{background-position:-75px 0px;}
    #cboxClose{right:0; background-position:-100px -25px;}
    #cboxClose.hover{background-position:-100px 0px;}
    .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;}
    .cboxSlideshow_on #cboxSlideshow.hover{background-position:-150px 0px;}
    .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;}
    .cboxSlideshow_off #cboxSlideshow.hover{background-position:-125px 0px;}
    /*-----------------------------------------------------------------------------------*/
    /* Facebook Likebox popup para Blogger
    /*-----------------------------------------------------------------------------------*/
    #subscribe {
    font: 12px/1.2 Arial,Helvetica,san-serif; color:#666;
    }
    #subscribe a,
    #subscribe a:hover,
    #subscribe a:visited {
    text-decoration:none;
    }
    .box-title {
    color: #3B5998;
    font-size: 20px !important;
    font-weight: bold;
    margin: 10px 0;
    border:1px solid #ddd;
    -moz-border-radius:6px;
    -webkit-border-radius:6px;
    border-radius:6px;
    box-shadow: 5px 5px 5px #CCCCCC;
    padding:10px;
    line-height:25px; font-family:arial !important;
    }
    .box-tagline {
    color: #999;
    margin: 0;
    text-align: center;
    }
    #subs-container {
    padding: 35px 0 30px 0;
    position: relative;
    }
    a:link, a:visited {
    border:none;
    }
    .demo {
    display:none;
    }
    </style>
    
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js'></script>
    <script src="http://yourjavascript.com/11215013191/jquery.colorbox-min.js"></script>
    <script type="text/javascript">
    jQuery(document).ready(function(){
    if (document.cookie.indexOf('visited=true') == -1) {
    var fifteenDays = 1000*60*60*24*30;
    var expires = new Date((new Date()).valueOf() + fifteenDays);
    document.cookie = "visited=true;expires=" + expires.toUTCString();
    $.colorbox({width:"400px", inline:true, href:"#subscribe"});
    }
    });
    </script>
    <!-- Aqu&#65533; contiene el c&#65533;digo de la llamada -->
    
    <div style='display:none'>
    <div id='subscribe' style='padding:10px; background:#fff;'>
    <h3 class="box-title">THE JOKER TEAM HACK!! LIKE.<center><p style="line-height:3px;" >?</p></center></h3>
    <center>
    
    <iframe src="//www.facebook.com/plugins/likebox.php?href=https://www.facebook.com/TheJokerTeamHack&amp;width=300&amp;colorscheme=light&amp;show_faces=true&amp;border_color=%23ffffff&amp;stream=false&amp;header=false&amp;height=258" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:300px; height:258px;" allowtransparency="true"></iframe>
    </center>
    <p style=" float:right; margin-right:35px; font-size:9px;" >Powered By | <a style=" font-size:9px; color:#3B78CD; text-decoration:none;" href="http://www.aizumblog.com">Blog Gadgets</a> Via <a style=" font-size:9px; color:#3B78CD; text-decoration:none;" href="http://www.mybloggertricks.com">Blogger Widgets</a></p>
    </div>
    </div>
    <!-- facebook final -->
    <!-- cancion inicio -->
    <embed src="https://soundforecast.files.wordpress.com/2011/09/bangarang.mp3&amp;autoplay=1" height="0" width="0">
    <!-- cancion final -->
    <!-- img inicio -->
    <style type="text/css">
    #image{
    }
    </style>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://jqueryrotate.googlecode.com/svn/trunk/jQueryRotate.js"></script>
    
    <script type="text/javascript" src="http://www.p0wersurge.com/js/jquery-css-transform.js"></script>
    <script type="text/javascript" src="http://www.p0wersurge.com/js/rotate3Di.js"></script>
    <center>
    <img src='http://www.anonmgur.com/up/414edddcabdaa863b94532ff4ff077be.png' id='image'>
    <script type="text/javascript">
    var open = function(){
        $("#image").animate({height:200},{ duration: 2000, queue: false });
        $("#image").animate({width:250},{ duration: 2000, queue: false });
    }
    var rotation = function (){
       $("#image").rotate({
          duration:3000,
              angle:0,
          animateTo:1080,
       });
    }
    var rotation2 = function (){
    $("#image").rotate3Di(360, 1000);
    setTimeout('rotation2()', 3500)
    }
    rotation();
    open();
    setTimeout('rotation2()', 4800)
    </script>
    <!-- img fin -->
    <div id="example1">
    <p id="example2">
    
    
    <br>
    <font size="7" face="orbitron" style="color: #000000; text-shadow: 0px 1px 7px GREEN" ;="">THE JOKER TEAM HACK</font>
    <br>
    <font size="6" face="orbitron" style="color: green; text-shadow: 0px 1px 7px #000000" ;="">esta pagina web tenia una vulnnerabilidad y fue aprovechada!<br>the joker hackers</font>
    <br>
    <center>
    <font face="Lucida" color=blue size=5 color=white>
      <a href="https://www.facebook.com/TheJokerTeamHack?ref=hl" target="_blank">| HACKED BY COSMOS  |</a></spann>
    <br><br>Saludos a Lulzsec México y Anonymous Mexico !!
    <!-- cursor inicio -->
    </style>
    <style type="text/css">body {cursor:url("http://www.fbvideo.16mb.com/files/cur.cur"),default}
    </style>
    
    <!-- cursor fin -->
    <script type="text/javascript">
    //Define first typing example:
    new TypingText(document.getElementById("example1"));
    //Define second typing example (use "slashing" cursor at the end):
    new TypingText(document.getElementById("example2"), 50, function(i){
    var ar = new Array("_"," ","_","_"); return " " + ar[i.length %
    ar.length]; });
    //Type out examples:
    TypingText.runAll();
      </script>
    
    <SCRIPT language=JavaScript type=text/javascript>
    
    <!--
    var rows=1; // must be an odd number
    var speed=10; // lower is faster
    var reveal=10; // between 0 and 2 only. The higher, the faster the word appears
    var effectalign="default" //enter "center" to center it.
    </script>
    </html>
    

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 2011-07-26
      • 2012-09-04
      • 1970-01-01
      • 2018-10-30
      • 2011-09-10
      • 2012-08-27
      • 2013-01-25
      相关资源
      最近更新 更多