Gmail Bunu önlemek için nasıl bağlantıları etiketleri kaldırarak

2 Cevap php

Ben işlevi mail () ile göndermeye çalışıyorum; bağlantılar içeren zengin metin; Ben kodu bu tür yolluyorum ...

 Please,  access <a href="http://www.site.md/contact/en/"> Contact </a> to send all these information

i etiketler çıkarıldı bu bağlantı, kod şöyle haline görebilirsiniz kundakçı atmak

 Please,  access <a>Contact</a> to send all these information

I need this script , after banning the person who violated rules , to send email to tell the reason why we banned him . On another email services email comes without problems , what is my mistake , sorry for my English , down i'll show a part from script for sending email , the important one..

     // Set and wordwrap message body
 $body = "From: $name\n\n";
 $body .= "Message: $message";
 $body = wordwrap($body, 70);

 // Build header

 $headers  = 'MIME-Version: 1.0' . "\r\n";
 $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

 $headers .= "From: $email\n";
 if ($cc == 1) {
  $headers .= "Cc: $email\n";
 }
 $headers .= "X-Mailer: PHP/Contact";


 // Send email
 if(!@mail($to, $subject, $body, $headers)) { 
  echo '<b> ERROR ! </b> Unfortunately, a server issue prevented delivery of your message<br />'; }

2 Cevap

Sorunun bir kısmı uzun satırları, ama wordwrap() Bunu çözmek için yeterli değildir.

Bir e-posta keyfi uzun hatları olabilir, ancak bunlar sadece kısa çizgiler sağlayan bir protokol üzerinden iletilir. Yani uzun satırları bölmek gerekir. Sonra onlara sonuna kadar = ekleyerek bölünmüş olan protokolü etiketler çizgiler ne yani bu gibi bakarak başlar.

Characters       2         3         4         5         6         7
12346790123456789012345678901234567890132456789012345678901234567890123456789

This is a long line with text which goes beyond the 78 character limit imposed by the protocol

Bu gibi bakıyor biter

This is a long line with text which goes beyond the 78 character limit=
imposed by the protocol

O düşünceden böyle = kullanarak mesajında ​​kullanılamaz = anlamına gelir, bu yüzden kaçtı gerekir. Yani (3D = için hex kodu) = 3D ile mesajında ​​= değiştirmeniz gerekir.

Bu = xx ve çok fazla 126 ASCII kodu ile bir şey ile (32 $message=encodeText($message) yapmak gerekir, bunu yapmak için bu işlevleri kullanabilirsiniz.

function encodeText($input) {
  // split input into lines, split by \r\n, \r or \n
  $lines=preg_split("/(?:\r\n|\r|\n)/", $input);
  $text="";

  // for each line, encode it into a 78 char max line.
  for ($i=0; $i<count($lines); $i++) {
     $text.=encodeLine($lines[$i]);
  }

  return $text;
}

/**
 * This splits a line into a number of pieces, each shorter than the 78 char
 * limit. It also add continuation marks (i.e. =) to then end of each piece
 * of the resulting line, and escapes any = characters, control characters
 * or characters with bit 8 set, and backspace.
 * @return a multiline string (with /r/n linebreaks)
 */
function encodeLine($line) {
  $split=Array();
  $result="";
  $piece='';
  $j=0;
  for ($i=0; $i<strlen($line); $i++) {
     // if you've just split a line, you'll need to add an = to the
     // end of the previous one
     if ($j>0 && $piece=="") $split[$j-1].="=";

     // replace = and not printable ascii characters with =XX
     if (ord($line{$i})==0x3D) {
        $piece.="=3D";
     } else if (ord($line{$i})<32) {
        $piece.="=".bin2hex($line{$i});
     } else if (ord($line{$i})>126) {
        $piece.="=".bin2hex($line{$i});
     } else {
        $piece.=$line{$i};
     }

     // if the resulting line is longer than 71 characters split the line
     if (strlen($piece)>=72) {
        $split[$j]=$piece;
        $piece="";
        $j++;
     }
  }

  // the last piece being assembled should be added to the array of pieces
  if (strlen($piece)>0) $split[]=$piece;

  // if a piece ends in whitespace then replace that whitespace with =20
  // for a space or =09 for a tab.
  for ($i=0; $i<count($split); $i++) {
     $last=substr($split[$i],-1);
     if ($last=="\t") $last="=09";
     if ($last==" ") $last="=20";
     $split[$i]=substr($split[$i],0,strlen($split[$i])-1).$last;
  }

  // assemble pieces into a single multiline string.
  for ($i=0; $i<count($split); $i++) {
     $result.=$split[$i]."\r\n";
  }

  return $result;
}

This might be to late but, oh well just figure it out. At least that's what I'm seeing here. Basically I'm generating the Newsletter dynamic based on some data and when I found inside a string a specific syntax I had to replace it with a anchor tag. Anyway, here it is:

Kötü biçimlendirme:

"<a href='" + url + "'>" + name + "</a>";

İyi biçimlendirme:

'<a href="' + url + '">' + name + '</a>';

Düz cevap, href nitelik için kullanım double-quotes.