2012-12-19 2 views
0

나는 몇 주 동안 버그를 검색하여 마침내 찾을 수있었습니다. 그러나이를 해결하는 방법에 대한 도움이 필요합니다. 컨텍스트는 전자 메일 주소 확인입니다.이메일을 삭제하는 방법. n n

로그인 이름의 문자 수에 따라 PHP 명령 quoted_printable_encode()는 줄 바꿈이 오는 점 앞 또는 뒤에 줄을 끊습니다.

이 작동 ...

Ihre E-Mail-Adresse [email protected] wurde als Kontaktadresse f=C3=BCr das= 
Benutzerkonto "abcdefg.abcdef" auf https://www.snipsnapme.com eingetragen. 

Falls Sie dieses Benutzerkonto selbst eingerichtet haben, best=C3=A4tigen S= 
ie Ihre korrekte E-Mail-Adresse bitte, indem Sie auf folgenden Link klicken= 

...

이 점 전에 손질된다.

Ihre E-Mail-Adresse [email protected] wurde als Kontaktadresse f=C3=BCr das= 
Benutzerkonto "abcdefg.abcdefg" auf https://www.snipsnapme.com eingetragen= 
. 

Falls Sie dieses Benutzerkonto selbst eingerichtet haben, best=C3=A4tigen S= 
ie Ihre korrekte E-Mail-Adresse bitte, indem Sie auf folgenden Link klicken= 

는 지금까지 내가 기억하는 \ n + 점 + \ n + \ n는 "메시지의 끝"에 대한 마커 - 그래서 메시지가 여기에 트리밍 된 이유는 절대적으로 분명하다. 그러나 quoted_printable_encode()가 그 것을 오해하기 때문에 any = \ ndot \ n \ n을 다른 것으로 대체하는 것이 현명하지 않습니다.

내가 놓친 것이 있습니까? 뭐?

힌트를 보내 주셔서 감사합니다. BurninLeo


PHP의 메일로 전송로이 전체 메시지 내용이다(). linux에서 후위가 \ n을 \ r \ n으로 대체하기 때문에 개행 문자는 \ n입니다.

--=_SubliminalMessagesInCinemaDontWork 
Content-Type: text/plain; charset=UTF-8 
Content-Transfer-Encoding: quoted-printable 

Guten Tag, 

Ihre E-Mail-Adresse [email protected] wurde als Kontaktadresse f=C3=BCr das= 
Benutzerkonto "abcdefg.abcdefg" auf https://www.snipsnapme.com eingetragen= 
. 

Falls Sie dieses Benutzerkonto selbst eingerichtet haben, best=C3=A4tigen S= 
ie Ihre korrekte E-Mail-Adresse bitte, indem Sie auf folgenden Link klicken= 
: https://www.snipsnapme.com/admin/act.php?t=3D1234567890ABCDEF 

Der Best=C3=A4tigungscode f=C3=BCr Ihre E-Mail-Adresse lautet: 1234567890AB= 
CDEF 


Falls Sie das Benutzerkonto nicht selbst eingerichtet haben, will m=C3=B6gl= 
icherweise eine andere Person Ihre E-Mail-Adresse missbrauchen. In diesem F= 
all l=C3=B6schen Sie diese E-Mail bitte einfach. 

---------------------------------------------------------- 
snipsnapme.com - https://www.snipsnapme.com 
---------------------------------------------------------- 
--=_SubliminalMessagesInCinemaDontWork 
Content-Type: text/html; charset=UTF-8 
Content-Transfer-Encoding: quoted-printable 

<html> 
<head> 
<title>Best=C3=A4tigung der E-Mail-Adresse</title> 
<style> 
body { font-family: verdana, arial, sans-serif } 
a.button:link { background-color: #00AA00 } 
a.button:visited { background-color: #009900 } 
a.button:focus, 
a.button:hover, 
a.button:active { background-color: #66AA00 } 
</style> 
</head> 
<body> 
<p>Guten Tag,</p> 
<p>Ihre E-Mail-Adresse <strong>[email protected]</strong> wurde als Kontakt= 
adresse f=C3=BCr 
das Benutzerkonto "abcdefg.abcdefg" auf <strong>https://www.snipsnapme.com<= 
/strong> eingetragen.</p> 
<p>Falls Sie dieses Benutzerkonto selbst eingerichtet haben, best=C3=A4tige= 
n Sie 
Ihre korrekte E-Mail-Adresse bitte, indem Sie auf folgenden Knopf klicken.<= 
/p> 
<p style=3D"padding: 20px 0px"> 
<a href=3D"https://www.snipsnapme.com/admin/act.php?t=3D1234567890ABCDEF" c= 
lass=3D"button" style=3D"padding: 10px 20px; margin: 1px; border: 1px solid= 
white; outline: 1px solid #00AA00; background-color: #00AA00; color: #FFFF= 
FF; text-decoration: none">E-Mail-Adresse best=C3=A4tigen</a> 
</p> 
<p>Der Best=C3=A4tigungscode f=C3=BCr Ihre E-Mail-Adresse lautet: 123456789= 
ABCDEF</p> 
<p>Falls Sie das Benutzerkonto <u>nicht</u> selbst eingerichtet haben, 
will m=C3=B6glicherweise eine andere Person Ihre E-Mail-Adresse missbrauche= 
n. 
In diesem Fall l=C3=B6schen Sie diese E-Mail bitte einfach.</p> 
<div style=3D"margin-top: 24px; border-top: 2px solid #999999; border-botto= 
m: 2px solid #999999; padding: 8px 0px"> 
snipsnapme.com &ndash; <a href=3D"https://www.snipsnapme.com">https://www.s= 
nipsnapme.com</a> 
</div> 
</body> 
</html> 
--=_SubliminalMessagesInCinemaDontWork-- 
+0

응용 프로그램에서 걱정할 필요는 없습니다. 메일 소프트웨어에서 자동으로 처리해야합니다. – Barmar

+0

메일 소프트웨어가 그렇게한다면 크게 감사하겠습니다. 그러나 PHP의 mail() + Linux postfix는 프로그래머에게 특별한 함정을 안겨줍니다. 예를 들어이 소프트웨어 조합을 사용하여 RFC의 \ r \ n을 개행 문자로 사용할 수는 없지만 \ n을 사용해야합니다. 그리고이 단일 라인 문제는 시간과 시간을 낭비 했었습니다 ... – BurninLeo

+0

저는 Postfix를 실행하는 Linux 서버에서 이것을 재현하려고 시도했지만 할 수 없었습니다. – Barmar

답변

1

도트 만있는 모든 줄에 . (점)을 추가해야합니다.

preg_replace('/^(\.+)$/m', '.\1', $mail) 

이것은 전송 레이어의 더러운 아티팩트입니다. SMTP가 가장 유력한 범죄자입니다 (mail function documentation에서주의를 요청하십시오). 그러나 비슷하게 행동하는 다른 낮은 수준의 메카니즘이있을 수 있습니다. 예를 들어 sendmail_path 설정을 조정하거나 버그가있는 sendmail 프로그램을 사용하는 경우 비슷한 문제가 발생할 수 있습니다.

+0

완벽하게 간단한 해결책 :) Thenka 당신은 대단히! 복사 및 붙여 넣기를 원하는 사람들은 올바른 PHP 명령을 다음과 같이 입력하십시오 : '$ content = preg_replace ('/^(\\.+)$/m', '. \\ 1', $ content); ' quoted_printable_encode()가이 작업을 자체적으로 수행하지 않는 이유는 무엇입니까 ??? – BurninLeo

+0

전자 메일 인코딩이 아닌 SMTP 프로토콜의 일부입니다. – Barmar

+0

@ BurninLeo 아, 맞아. 나는 정규 표현식을 고쳤다. – kmkaplan

관련 문제