summaryrefslogtreecommitdiff
path: root/pear/packages/Net_SMTP-1.2.3.tar
blob: 3cdea1442797d577fa5b43acbaf93f7387e73f4f (plain)
ofshex dumpascii
0000 70 61 63 6b 61 67 65 2e 78 6d 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 package.xml.....................
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0060 00 00 00 00 31 30 30 36 34 34 20 00 20 20 31 37 35 30 20 00 20 20 20 20 32 34 20 00 20 20 20 20 ....100644....1750......24......
0080 20 20 31 30 34 30 30 20 20 37 36 35 37 35 32 32 37 36 34 20 20 20 36 33 36 35 20 00 00 00 00 00 ..10400..7657522764...6365......
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0200 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 49 53 <?xml.version="1.0".encoding="IS
0220 4f 2d 38 38 35 39 2d 31 22 20 3f 3e 0a 3c 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 3d 22 31 O-8859-1".?>.<package.version="1
0240 2e 30 22 3e 0a 20 20 3c 6e 61 6d 65 3e 4e 65 74 5f 53 4d 54 50 3c 2f 6e 61 6d 65 3e 0a 20 20 3c .0">...<name>Net_SMTP</name>...<
0260 73 75 6d 6d 61 72 79 3e 50 72 6f 76 69 64 65 73 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 summary>Provides.an.implementati
0280 6f 6e 20 6f 66 20 74 68 65 20 53 4d 54 50 20 70 72 6f 74 6f 63 6f 6c 3c 2f 73 75 6d 6d 61 72 79 on.of.the.SMTP.protocol</summary
02a0 3e 0a 20 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 50 72 6f 76 69 64 65 73 20 61 6e 20 69 6d 70 >...<description>Provides.an.imp
02c0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 4d 54 50 20 70 72 6f 74 6f 63 6f 6c lementation.of.the.SMTP.protocol
02e0 20 75 73 69 6e 67 20 50 45 41 52 27 73 20 4e 65 74 5f 53 6f 63 6b 65 74 20 63 6c 61 73 73 2e 3c .using.PEAR's.Net_Socket.class.<
0300 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0a 20 20 3c 6d 61 69 6e 74 61 69 6e 65 72 73 3e 0a 20 20 /description>...<maintainers>...
0320 20 20 3c 6d 61 69 6e 74 61 69 6e 65 72 3e 0a 20 20 20 20 20 20 3c 75 73 65 72 3e 63 68 61 67 65 ..<maintainer>.......<user>chage
0340 6e 62 75 3c 2f 75 73 65 72 3e 0a 20 20 20 20 20 20 3c 6e 61 6d 65 3e 43 68 75 63 6b 20 48 61 67 nbu</user>.......<name>Chuck.Hag
0360 65 6e 62 75 63 68 3c 2f 6e 61 6d 65 3e 0a 20 20 20 20 20 20 3c 65 6d 61 69 6c 3e 63 68 75 63 6b enbuch</name>.......<email>chuck
0380 40 68 6f 72 64 65 2e 6f 72 67 3c 2f 65 6d 61 69 6c 3e 0a 20 20 20 20 20 20 3c 72 6f 6c 65 3e 6c @horde.org</email>.......<role>l
03a0 65 61 64 3c 2f 72 6f 6c 65 3e 0a 20 20 20 20 3c 2f 6d 61 69 6e 74 61 69 6e 65 72 3e 0a 20 20 20 ead</role>.....</maintainer>....
03c0 20 3c 6d 61 69 6e 74 61 69 6e 65 72 3e 0a 20 20 20 20 20 20 3c 75 73 65 72 3e 6a 6f 6e 3c 2f 75 .<maintainer>.......<user>jon</u
03e0 73 65 72 3e 0a 20 20 20 20 20 20 3c 6e 61 6d 65 3e 4a 6f 6e 20 50 61 72 69 73 65 3c 2f 6e 61 6d ser>.......<name>Jon.Parise</nam
0400 65 3e 0a 20 20 20 20 20 20 3c 65 6d 61 69 6c 3e 6a 6f 6e 40 70 68 70 2e 6e 65 74 3c 2f 65 6d 61 e>.......<email>jon@php.net</ema
0420 69 6c 3e 0a 20 20 20 20 20 20 3c 72 6f 6c 65 3e 6c 65 61 64 3c 2f 72 6f 6c 65 3e 0a 20 20 20 20 il>.......<role>lead</role>.....
0440 3c 2f 6d 61 69 6e 74 61 69 6e 65 72 3e 0a 20 20 3c 2f 6d 61 69 6e 74 61 69 6e 65 72 73 3e 0a 20 </maintainer>...</maintainers>..
0460 20 3c 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 32 2e 33 3c 2f 76 .<release>.....<version>1.2.3</v
0480 65 72 73 69 6f 6e 3e 0a 20 20 20 20 3c 64 61 74 65 3e 32 30 30 33 2d 30 35 2d 31 31 3c 2f 64 61 ersion>.....<date>2003-05-11</da
04a0 74 65 3e 0a 20 20 20 20 3c 6c 69 63 65 6e 73 65 3e 50 48 50 20 4c 69 63 65 6e 73 65 3c 2f 6c 69 te>.....<license>PHP.License</li
04c0 63 65 6e 73 65 3e 0a 20 20 20 20 3c 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 61 74 65 3e cense>.....<state>stable</state>
04e0 0a 20 20 20 20 3c 6e 6f 74 65 73 3e 42 6f 74 68 20 32 33 35 20 28 41 75 74 68 65 6e 74 69 63 61 .....<notes>Both.235.(Authentica
0500 74 69 6f 6e 20 73 75 63 63 65 73 73 66 75 6c 29 20 61 6e 64 20 35 30 33 20 28 45 72 72 6f 72 3a tion.successful).and.503.(Error:
0520 20 61 6c 72 65 61 64 79 20 61 75 74 68 65 6e 74 69 63 61 74 65 64 29 20 61 72 65 20 6e 6f 77 20 .already.authenticated).are.now.
0540 61 63 63 65 70 74 65 64 20 61 73 20 76 61 6c 69 64 20 41 55 54 48 20 72 65 73 70 6f 6e 73 65 73 accepted.as.valid.AUTH.responses
0560 2e 0a 0a 35 30 33 20 28 45 72 72 6f 72 3a 20 61 6c 72 65 61 64 79 20 61 75 74 68 65 6e 74 69 63 ...503.(Error:.already.authentic
0580 61 74 65 64 29 20 69 73 20 6e 6f 77 20 63 6f 6e 73 69 64 65 72 65 64 20 61 20 76 61 6c 69 64 20 ated).is.now.considered.a.valid.
05a0 45 48 4c 4f 20 72 65 73 70 6f 6e 73 65 2e 3c 2f 6e 6f 74 65 73 3e 0a 20 20 20 20 3c 64 65 70 73 EHLO.response.</notes>.....<deps
05c0 3e 0a 20 20 20 20 20 20 3c 64 65 70 20 74 79 70 65 3d 22 70 6b 67 22 20 72 65 6c 3d 22 68 61 73 >.......<dep.type="pkg".rel="has
05e0 22 3e 4e 65 74 5f 53 6f 63 6b 65 74 3c 2f 64 65 70 3e 0a 20 20 20 20 3c 2f 64 65 70 73 3e 0a 20 ">Net_Socket</dep>.....</deps>..
0600 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 63 6c 61 73 73 22 20 6e 61 6d 65 3d 22 ...<provides.type="class".name="
0620 4e 65 74 5f 53 4d 54 50 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d Net_SMTP"./>.....<provides.type=
0640 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 73 65 74 44 65 "function".name="Net_SMTP::setDe
0660 62 75 67 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 bug"./>.....<provides.type="func
0680 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 67 65 74 52 65 73 70 6f 6e 73 tion".name="Net_SMTP::getRespons
06a0 65 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 e"./>.....<provides.type="functi
06c0 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 63 6f 6e 6e 65 63 74 22 20 2f 3e 0a on".name="Net_SMTP::connect"./>.
06e0 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 ....<provides.type="function".na
0700 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 64 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 0a 20 20 20 me="Net_SMTP::disconnect"./>....
0720 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d .<provides.type="function".name=
0740 22 4e 65 74 5f 53 4d 54 50 3a 3a 61 75 74 68 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 "Net_SMTP::auth"./>.....<provide
0760 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 s.type="function".name="Net_SMTP
0780 3a 3a 68 65 6c 6f 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 ::helo"./>.....<provides.type="f
07a0 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 6d 61 69 6c 46 72 6f unction".name="Net_SMTP::mailFro
07c0 6d 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 m"./>.....<provides.type="functi
07e0 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 72 63 70 74 54 6f 22 20 2f 3e 0a 20 on".name="Net_SMTP::rcptTo"./>..
0800 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d ...<provides.type="function".nam
0820 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 71 75 6f 74 65 64 61 74 61 22 20 2f 3e 0a 20 20 20 20 3c e="Net_SMTP::quotedata"./>.....<
0840 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e provides.type="function".name="N
0860 65 74 5f 53 4d 54 50 3a 3a 64 61 74 61 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 et_SMTP::data"./>.....<provides.
0880 74 79 70 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a type="function".name="Net_SMTP::
08a0 73 65 6e 64 5f 66 72 6f 6d 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 send_from"./>.....<provides.type
08c0 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 73 6f 6d 6c ="function".name="Net_SMTP::soml
08e0 5f 66 72 6f 6d 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 _from"./>.....<provides.type="fu
0900 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 73 61 6d 6c 5f 66 72 6f nction".name="Net_SMTP::saml_fro
0920 6d 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 m"./>.....<provides.type="functi
0940 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 72 73 65 74 22 20 2f 3e 0a 20 20 20 on".name="Net_SMTP::rset"./>....
0960 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d .<provides.type="function".name=
0980 22 4e 65 74 5f 53 4d 54 50 3a 3a 76 72 66 79 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 "Net_SMTP::vrfy"./>.....<provide
09a0 73 20 74 79 70 65 3d 22 66 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 s.type="function".name="Net_SMTP
09c0 3a 3a 6e 6f 6f 70 22 20 2f 3e 0a 20 20 20 20 3c 70 72 6f 76 69 64 65 73 20 74 79 70 65 3d 22 66 ::noop"./>.....<provides.type="f
09e0 75 6e 63 74 69 6f 6e 22 20 6e 61 6d 65 3d 22 4e 65 74 5f 53 4d 54 50 3a 3a 69 64 65 6e 74 69 66 unction".name="Net_SMTP::identif
0a00 79 53 65 6e 64 65 72 22 20 2f 3e 0a 20 20 20 20 3c 66 69 6c 65 6c 69 73 74 3e 0a 20 20 20 20 20 ySender"./>.....<filelist>......
0a20 20 3c 66 69 6c 65 20 72 6f 6c 65 3d 22 70 68 70 22 20 62 61 73 65 69 6e 73 74 61 6c 6c 64 69 72 .<file.role="php".baseinstalldir
0a40 3d 22 4e 65 74 22 20 6d 64 35 73 75 6d 3d 22 66 32 33 61 63 38 32 62 37 62 39 39 32 64 35 32 30 ="Net".md5sum="f23ac82b7b992d520
0a60 33 32 35 38 30 65 30 35 62 61 62 66 62 61 39 22 20 6e 61 6d 65 3d 22 53 4d 54 50 2e 70 68 70 22 32580e05babfba9".name="SMTP.php"
0a80 2f 3e 0a 20 20 20 20 3c 2f 66 69 6c 65 6c 69 73 74 3e 0a 20 20 3c 2f 72 65 6c 65 61 73 65 3e 0a />.....</filelist>...</release>.
0aa0 20 20 3c 63 68 61 6e 67 65 6c 6f 67 3e 0a 20 20 20 20 3c 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 ..<changelog>.....<release>.....
0ac0 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 32 2e 32 3c 2f 76 65 72 73 69 6f 6e 3e 0a 20 20 20 20 20 ..<version>1.2.2</version>......
0ae0 20 3c 64 61 74 65 3e 32 30 30 33 2d 30 35 2d 30 32 3c 2f 64 61 74 65 3e 0a 20 20 20 20 20 20 3c .<date>2003-05-02</date>.......<
0b00 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 61 74 65 3e 0a 20 20 20 20 20 20 3c 6e 6f 74 65 state>stable</state>.......<note
0b20 73 3e 46 69 78 20 61 20 63 61 6c 6c 2d 74 69 6d 65 20 70 61 73 73 2d 62 79 2d 72 65 66 65 72 65 s>Fix.a.call-time.pass-by-refere
0b40 6e 63 65 20 70 72 6f 62 6c 65 6d 20 74 68 61 74 20 77 61 73 20 72 61 69 73 69 6e 67 20 61 20 77 nce.problem.that.was.raising.a.w
0b60 61 72 6e 69 6e 67 20 69 66 20 63 61 6c 6c 2d 74 69 6d 65 20 70 61 73 73 2d 62 79 2d 72 65 66 65 arning.if.call-time.pass-by-refe
0b80 72 65 6e 63 65 20 77 61 73 20 64 69 73 61 62 6c 65 64 2e 0a 20 20 20 20 20 20 0a 3c 2f 6e 6f 74 rence.was.disabled.........</not
0ba0 65 73 3e 0a 20 20 20 20 3c 2f 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 3c 72 65 6c 65 61 73 65 3e es>.....</release>.....<release>
0bc0 0a 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 32 2e 31 3c 2f 76 65 72 73 69 6f 6e 3e 0a .......<version>1.2.1</version>.
0be0 20 20 20 20 20 20 3c 64 61 74 65 3e 32 30 30 33 2d 30 34 2d 32 36 3c 2f 64 61 74 65 3e 0a 20 20 ......<date>2003-04-26</date>...
0c00 20 20 20 20 3c 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 61 74 65 3e 0a 20 20 20 20 20 20 ....<state>stable</state>.......
0c20 3c 6e 6f 74 65 73 3e 54 68 65 20 41 75 74 68 5f 53 41 53 4c 20 70 61 63 6b 61 67 65 20 69 73 20 <notes>The.Auth_SASL.package.is.
0c40 6e 6f 20 6c 6f 6e 67 65 72 20 61 62 73 6f 6c 75 74 65 6c 79 20 72 65 71 75 69 72 65 64 2c 20 62 no.longer.absolutely.required,.b
0c60 75 74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 ut.it.will.be.used.if.it.is.avai
0c80 6c 61 62 6c 65 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 61 75 74 68 65 6e 74 69 63 lable...Otherwise,.the.authentic
0ca0 61 74 69 6f 6e 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 64 65 70 65 6e 64 20 75 70 6f 6e 20 69 ation.methods.that.depend.upon.i
0cc0 74 20 77 69 6c 6c 20 62 65 20 64 69 73 61 62 6c 65 64 2e 0a 20 20 20 20 20 20 0a 3c 2f 6e 6f 74 t.will.be.disabled.........</not
0ce0 65 73 3e 0a 20 20 20 20 3c 2f 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 3c 72 65 6c 65 61 73 65 3e es>.....</release>.....<release>
0d00 0a 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 32 2e 30 3c 2f 76 65 72 73 69 6f 6e 3e 0a .......<version>1.2.0</version>.
0d20 20 20 20 20 20 20 3c 64 61 74 65 3e 32 30 30 33 2d 30 34 2d 30 36 3c 2f 64 61 74 65 3e 0a 20 20 ......<date>2003-04-06</date>...
0d40 20 20 20 20 3c 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 61 74 65 3e 0a 20 20 20 20 20 20 ....<state>stable</state>.......
0d60 3c 6e 6f 74 65 73 3e 2d 20 50 65 72 66 6f 72 6d 20 64 61 74 61 20 71 75 6f 74 69 6e 67 20 69 6e <notes>-.Perform.data.quoting.in
0d80 20 69 74 73 20 6f 77 6e 20 72 6f 75 74 69 6e 65 3a 20 71 75 6f 74 65 64 61 74 61 28 29 0a 20 20 .its.own.routine:.quotedata()...
0da0 20 20 20 20 0a 3c 2f 6e 6f 74 65 73 3e 0a 20 20 20 20 3c 2f 72 65 6c 65 61 73 65 3e 0a 20 20 20 .....</notes>.....</release>....
0dc0 20 3c 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 31 2e 32 3c .<release>.......<version>1.1.2<
0de0 2f 76 65 72 73 69 6f 6e 3e 0a 20 20 20 20 20 20 3c 64 61 74 65 3e 32 30 30 33 2d 30 32 2d 31 37 /version>.......<date>2003-02-17
0e00 3c 2f 64 61 74 65 3e 0a 20 20 20 20 20 20 3c 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 61 </date>.......<state>stable</sta
0e20 74 65 3e 0a 20 20 20 20 20 20 3c 6e 6f 74 65 73 3e 2d 20 43 6f 72 72 65 63 74 6c 79 20 68 61 6e te>.......<notes>-.Correctly.han
0e40 64 6c 65 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 73 65 72 76 65 72 27 73 20 dle.the.case.where.the.server's.
0e60 45 53 4d 54 50 20 72 65 73 70 6f 6e 73 65 20 69 6e 63 6c 75 64 65 73 20 61 20 53 49 5a 45 20 6b ESMTP.response.includes.a.SIZE.k
0e80 65 79 77 6f 72 64 20 77 69 74 68 20 6e 6f 20 73 70 65 63 69 66 69 63 20 76 61 6c 75 65 2e 0a 20 eyword.with.no.specific.value...
0ea0 20 20 20 20 20 0a 3c 2f 6e 6f 74 65 73 3e 0a 20 20 20 20 3c 2f 72 65 6c 65 61 73 65 3e 0a 20 20 ......</notes>.....</release>...
0ec0 20 20 3c 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 31 2e 31 ..<release>.......<version>1.1.1
0ee0 3c 2f 76 65 72 73 69 6f 6e 3e 0a 20 20 20 20 20 20 3c 64 61 74 65 3e 32 30 30 33 2d 30 31 2d 33 </version>.......<date>2003-01-3
0f00 30 3c 2f 64 61 74 65 3e 0a 20 20 20 20 20 20 3c 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 0</date>.......<state>stable</st
0f20 61 74 65 3e 0a 20 20 20 20 20 20 3c 6e 6f 74 65 73 3e 2d 20 44 6f 6e 27 74 20 65 6e 66 6f 72 63 ate>.......<notes>-.Don't.enforc
0f40 65 20 61 20 6d 61 78 69 6d 75 6d 20 6d 65 73 73 61 67 65 20 73 69 7a 65 20 69 66 20 74 68 65 20 e.a.maximum.message.size.if.the.
0f60 53 49 5a 45 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 0a 3c SIZE.parameter.is.zero.........<
0f80 2f 6e 6f 74 65 73 3e 0a 20 20 20 20 3c 2f 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 3c 72 65 6c 65 /notes>.....</release>.....<rele
0fa0 61 73 65 3e 0a 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 31 2e 30 3c 2f 76 65 72 73 69 ase>.......<version>1.1.0</versi
0fc0 6f 6e 3e 0a 20 20 20 20 20 20 3c 64 61 74 65 3e 32 30 30 33 2d 30 31 2d 31 38 3c 2f 64 61 74 65 on>.......<date>2003-01-18</date
0fe0 3e 0a 20 20 20 20 20 20 3c 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 61 74 65 3e 0a 20 20 >.......<state>stable</state>...
1000 20 20 20 20 3c 6e 6f 74 65 73 3e 2d 20 54 68 65 20 53 4d 54 50 20 73 65 72 76 65 72 27 73 20 53 ....<notes>-.The.SMTP.server's.S
1020 49 5a 45 20 63 61 70 61 62 69 6c 69 74 79 20 69 73 20 6e 6f 77 20 68 6f 6e 6f 72 65 64 2e 0a 2d IZE.capability.is.now.honored..-
1040 20 49 6d 70 72 6f 76 65 64 20 73 75 70 70 6f 72 74 20 66 6f 72 20 53 4d 54 50 20 61 75 74 68 65 .Improved.support.for.SMTP.authe
1060 6e 74 69 63 61 74 69 6f 6e 20 28 4c 4f 47 49 4e 2c 20 50 4c 41 49 4e 2c 20 43 52 41 4d 2d 4d 44 ntication.(LOGIN,.PLAIN,.CRAM-MD
1080 35 2c 20 44 49 47 45 53 54 2d 4d 44 35 29 2e 0a 2d 20 4f 76 65 72 68 61 75 6c 65 64 20 74 68 65 5,.DIGEST-MD5)..-.Overhauled.the
10a0 20 73 65 72 76 65 72 20 72 65 73 70 6f 6e 73 65 20 70 61 72 73 69 6e 67 20 73 79 73 74 65 6d 2e .server.response.parsing.system.
10c0 0a 2d 20 41 64 64 65 64 20 6f 70 74 69 6f 6e 61 6c 20 64 65 62 75 67 67 69 6e 67 20 6f 75 74 70 .-.Added.optional.debugging.outp
10e0 75 74 20 28 65 6e 61 62 6c 65 64 20 76 69 61 20 73 65 74 44 65 62 75 67 28 29 29 2e 0a 2d 20 41 ut.(enabled.via.setDebug())..-.A
1100 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 63 61 6e 20 6e 6f 77 20 62 65 20 73 70 65 63 69 66 .timeout.value.can.now.be.specif
1120 69 65 64 20 66 6f 72 20 74 68 65 20 73 6f 63 6b 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 ied.for.the.socket.connection...
1140 20 20 20 20 20 0a 3c 2f 6e 6f 74 65 73 3e 0a 20 20 20 20 3c 2f 72 65 6c 65 61 73 65 3e 0a 20 20 ......</notes>.....</release>...
1160 20 20 3c 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 30 2e 31 ..<release>.......<version>1.0.1
1180 3c 2f 76 65 72 73 69 6f 6e 3e 0a 20 20 20 20 20 20 3c 64 61 74 65 3e 32 30 30 33 2d 30 31 2d 30 </version>.......<date>2003-01-0
11a0 32 3c 2f 64 61 74 65 3e 0a 20 20 20 20 20 20 3c 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 2</date>.......<state>stable</st
11c0 61 74 65 3e 0a 20 20 20 20 20 20 3c 6e 6f 74 65 73 3e 43 6f 72 72 65 63 74 65 64 20 61 6e 20 6f ate>.......<notes>Corrected.an.o
11e0 66 66 2d 62 79 2d 6f 6e 65 20 62 75 67 20 74 68 61 74 20 63 6f 72 72 75 70 74 65 64 20 74 68 65 ff-by-one.bug.that.corrupted.the
1200 20 6c 69 73 74 20 6f 66 20 45 53 4d 54 50 20 63 61 70 61 62 69 6c 69 74 69 65 73 2e 0a 20 20 20 .list.of.ESMTP.capabilities.....
1220 20 20 20 0a 3c 2f 6e 6f 74 65 73 3e 0a 20 20 20 20 3c 2f 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 ....</notes>.....</release>.....
1240 3c 72 65 6c 65 61 73 65 3e 0a 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 30 3c 2f 76 65 <release>.......<version>1.0</ve
1260 72 73 69 6f 6e 3e 0a 20 20 20 20 20 20 3c 64 61 74 65 3e 32 30 30 32 2d 30 36 2d 31 31 3c 2f 64 rsion>.......<date>2002-06-11</d
1280 61 74 65 3e 0a 20 20 20 20 20 20 3c 73 74 61 74 65 3e 73 74 61 62 6c 65 3c 2f 73 74 61 74 65 3e ate>.......<state>stable</state>
12a0 0a 20 20 20 20 20 20 3c 6e 6f 74 65 73 3e 49 6e 69 74 69 61 6c 20 72 65 6c 65 61 73 65 20 61 73 .......<notes>Initial.release.as
12c0 20 50 45 41 52 20 70 61 63 6b 61 67 65 0a 3c 2f 6e 6f 74 65 73 3e 0a 20 20 20 20 3c 2f 72 65 6c .PEAR.package.</notes>.....</rel
12e0 65 61 73 65 3e 0a 20 20 3c 2f 63 68 61 6e 67 65 6c 6f 67 3e 0a 3c 2f 70 61 63 6b 61 67 65 3e 0a ease>...</changelog>.</package>.
1300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1400 4e 65 74 5f 53 4d 54 50 2d 31 2e 32 2e 33 2f 53 4d 54 50 2e 70 68 70 00 00 00 00 00 00 00 00 00 Net_SMTP-1.2.3/SMTP.php.........
1420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1460 00 00 00 00 31 30 30 36 34 34 20 00 20 20 31 37 35 30 20 00 20 20 20 20 32 34 20 00 20 20 20 20 ....100644....1750......24......
1480 20 20 36 35 37 31 37 20 20 37 36 35 37 35 32 32 35 34 37 20 20 20 37 36 32 30 20 00 00 00 00 00 ..65717..7657522547...7620......
14a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
14c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
14e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1600 3c 3f 70 68 70 0a 2f 2a 20 76 69 6d 3a 20 73 65 74 20 65 78 70 61 6e 64 74 61 62 20 73 6f 66 74 <?php./*.vim:.set.expandtab.soft
1620 74 61 62 73 74 6f 70 3d 34 20 74 61 62 73 74 6f 70 3d 34 20 73 68 69 66 74 77 69 64 74 68 3d 34 tabstop=4.tabstop=4.shiftwidth=4
1640 3a 20 2a 2f 0a 2f 2f 20 2b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d :.*/.//.+-----------------------
1660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
1680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 0a 2f 2f 20 7c 20 50 48 50 20 56 65 72 73 69 6f ---------------+.//.|.PHP.Versio
16a0 6e 20 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n.4.............................
16c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 0a 2f 2f 20 ...........................|.//.
16e0 2b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d +-------------------------------
1700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
1720 2d 2d 2d 2d 2d 2d 2d 2b 0a 2f 2f 20 7c 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 31 39 39 37 -------+.//.|.Copyright.(c).1997
1740 2d 32 30 30 33 20 54 68 65 20 50 48 50 20 47 72 6f 75 70 20 20 20 20 20 20 20 20 20 20 20 20 20 -2003.The.PHP.Group.............
1760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 0a 2f 2f 20 2b 2d 2d 2d 2d 2d 2d 2d ...................|.//.+-------
1780 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
17a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b -------------------------------+
17c0 0a 2f 2f 20 7c 20 54 68 69 73 20 73 6f 75 72 63 65 20 66 69 6c 65 20 69 73 20 73 75 62 6a 65 63 .//.|.This.source.file.is.subjec
17e0 74 20 74 6f 20 76 65 72 73 69 6f 6e 20 32 2e 30 32 20 6f 66 20 74 68 65 20 50 48 50 20 6c 69 63 t.to.version.2.02.of.the.PHP.lic
1800 65 6e 73 65 2c 20 20 20 20 20 20 7c 0a 2f 2f 20 7c 20 74 68 61 74 20 69 73 20 62 75 6e 64 6c 65 ense,......|.//.|.that.is.bundle
1820 64 20 77 69 74 68 20 74 68 69 73 20 70 61 63 6b 61 67 65 20 69 6e 20 74 68 65 20 66 69 6c 65 20 d.with.this.package.in.the.file.
1840 4c 49 43 45 4e 53 45 2c 20 61 6e 64 20 69 73 20 20 20 20 20 20 20 20 7c 0a 2f 2f 20 7c 20 61 76 LICENSE,.and.is........|.//.|.av
1860 61 69 6c 61 62 6c 65 20 61 74 20 74 68 72 6f 75 67 68 20 74 68 65 20 77 6f 72 6c 64 2d 77 69 64 ailable.at.through.the.world-wid
1880 65 2d 77 65 62 20 61 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e-web.at........................
18a0 20 20 20 7c 0a 2f 2f 20 7c 20 68 74 74 70 3a 2f 2f 77 77 77 2e 70 68 70 2e 6e 65 74 2f 6c 69 63 ...|.//.|.http://www.php.net/lic
18c0 65 6e 73 65 2f 32 5f 30 32 2e 74 78 74 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ense/2_02.txt...................
18e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 0a 2f 2f 20 7c 20 49 66 20 79 6f 75 20 64 69 64 ...............|.//.|.If.you.did
1900 20 6e 6f 74 20 72 65 63 65 69 76 65 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 50 48 50 20 6c .not.receive.a.copy.of.the.PHP.l
1920 69 63 65 6e 73 65 20 61 6e 64 20 61 72 65 20 75 6e 61 62 6c 65 20 74 6f 20 20 20 7c 0a 2f 2f 20 icense.and.are.unable.to...|.//.
1940 7c 20 6f 62 74 61 69 6e 20 69 74 20 74 68 72 6f 75 67 68 20 74 68 65 20 77 6f 72 6c 64 2d 77 69 |.obtain.it.through.the.world-wi
1960 64 65 2d 77 65 62 2c 20 70 6c 65 61 73 65 20 73 65 6e 64 20 61 20 6e 6f 74 65 20 74 6f 20 20 20 de-web,.please.send.a.note.to...
1980 20 20 20 20 20 20 20 7c 0a 2f 2f 20 7c 20 6c 69 63 65 6e 73 65 40 70 68 70 2e 6e 65 74 20 73 6f .......|.//.|.license@php.net.so
19a0 20 77 65 20 63 61 6e 20 6d 61 69 6c 20 79 6f 75 20 61 20 63 6f 70 79 20 69 6d 6d 65 64 69 61 74 .we.can.mail.you.a.copy.immediat
19c0 65 6c 79 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 0a 2f 2f 20 2b 2d 2d 2d 2d 2d 2d 2d ely................|.//.+-------
19e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
1a00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b -------------------------------+
1a20 0a 2f 2f 20 7c 20 41 75 74 68 6f 72 73 3a 20 43 68 75 63 6b 20 48 61 67 65 6e 62 75 63 68 20 3c .//.|.Authors:.Chuck.Hagenbuch.<
1a40 63 68 75 63 6b 40 68 6f 72 64 65 2e 6f 72 67 3e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 chuck@horde.org>................
1a60 20 20 20 20 20 20 20 20 20 20 20 7c 0a 2f 2f 20 7c 20 20 20 20 20 20 20 20 20 20 4a 6f 6e 20 50 ...........|.//.|..........Jon.P
1a80 61 72 69 73 65 20 3c 6a 6f 6e 40 70 68 70 2e 6e 65 74 3e 20 20 20 20 20 20 20 20 20 20 20 20 20 arise.<jon@php.net>.............
1aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 0a 2f 2f 20 7c 20 20 20 .......................|.//.|...
1ac0 20 20 20 20 20 20 20 44 61 6d 69 61 6e 20 41 6c 65 6a 61 6e 64 72 6f 20 46 65 72 6e 61 6e 64 65 .......Damian.Alejandro.Fernande
1ae0 7a 20 53 6f 73 61 20 3c 64 61 6d 6c 69 73 74 73 40 63 6e 62 61 2e 75 62 61 2e 61 72 3e 20 20 20 z.Sosa.<damlists@cnba.uba.ar>...
1b00 20 20 20 7c 0a 2f 2f 20 2b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ...|.//.+-----------------------
1b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
1b40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2b 0a 0a 72 65 71 75 69 72 65 5f 6f 6e 63 65 20 27 ---------------+..require_once.'
1b60 50 45 41 52 2e 70 68 70 27 3b 0a 72 65 71 75 69 72 65 5f 6f 6e 63 65 20 27 4e 65 74 2f 53 6f 63 PEAR.php';.require_once.'Net/Soc
1b80 6b 65 74 2e 70 68 70 27 3b 0a 0a 2f 2a 2a 0a 20 2a 20 50 72 6f 76 69 64 65 73 20 61 6e 20 69 6d ket.php';../**..*.Provides.an.im
1ba0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 4d 54 50 20 70 72 6f 74 6f 63 6f plementation.of.the.SMTP.protoco
1bc0 6c 20 75 73 69 6e 67 20 50 45 41 52 27 73 0a 20 2a 20 4e 65 74 5f 53 6f 63 6b 65 74 3a 3a 20 63 l.using.PEAR's..*.Net_Socket::.c
1be0 6c 61 73 73 2e 0a 20 2a 0a 20 2a 20 40 70 61 63 6b 61 67 65 20 4e 65 74 5f 53 4d 54 50 0a 20 2a lass...*..*.@package.Net_SMTP..*
1c00 20 40 61 75 74 68 6f 72 20 20 43 68 75 63 6b 20 48 61 67 65 6e 62 75 63 68 20 3c 63 68 75 63 6b .@author..Chuck.Hagenbuch.<chuck
1c20 40 68 6f 72 64 65 2e 6f 72 67 3e 0a 20 2a 20 40 61 75 74 68 6f 72 20 20 4a 6f 6e 20 50 61 72 69 @horde.org>..*.@author..Jon.Pari
1c40 73 65 20 3c 6a 6f 6e 40 70 68 70 2e 6e 65 74 3e 0a 20 2a 20 40 61 75 74 68 6f 72 20 20 44 61 6d se.<jon@php.net>..*.@author..Dam
1c60 69 61 6e 20 41 6c 65 6a 61 6e 64 72 6f 20 46 65 72 6e 61 6e 64 65 7a 20 53 6f 73 61 20 3c 64 61 ian.Alejandro.Fernandez.Sosa.<da
1c80 6d 6c 69 73 74 73 40 63 6e 62 61 2e 75 62 61 2e 61 72 3e 0a 20 2a 2f 0a 63 6c 61 73 73 20 4e 65 mlists@cnba.uba.ar>..*/.class.Ne
1ca0 74 5f 53 4d 54 50 0a 7b 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 54 68 65 20 73 65 72 76 t_SMTP.{...../**......*.The.serv
1cc0 65 72 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 2e 0a 20 20 20 20 20 2a 20 40 76 61 72 20 73 74 er.to.connect.to.......*.@var.st
1ce0 72 69 6e 67 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 ring......*.@access.public......
1d00 2a 2f 0a 20 20 20 20 76 61 72 20 24 68 6f 73 74 20 3d 20 27 6c 6f 63 61 6c 68 6f 73 74 27 3b 0a */.....var.$host.=.'localhost';.
1d20 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 54 68 65 20 70 6f 72 74 20 74 6f 20 63 6f 6e 6e ...../**......*.The.port.to.conn
1d40 65 63 74 20 74 6f 2e 0a 20 20 20 20 20 2a 20 40 76 61 72 20 69 6e 74 0a 20 20 20 20 20 2a 20 40 ect.to.......*.@var.int......*.@
1d60 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 76 61 72 20 24 70 access.public......*/.....var.$p
1d80 6f 72 74 20 3d 20 32 35 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 54 68 65 20 76 61 ort.=.25;....../**......*.The.va
1da0 6c 75 65 20 74 6f 20 67 69 76 65 20 77 68 65 6e 20 73 65 6e 64 69 6e 67 20 45 48 4c 4f 20 6f 72 lue.to.give.when.sending.EHLO.or
1dc0 20 48 45 4c 4f 2e 0a 20 20 20 20 20 2a 20 40 76 61 72 20 73 74 72 69 6e 67 0a 20 20 20 20 20 2a .HELO.......*.@var.string......*
1de0 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 76 61 72 20 .@access.public......*/.....var.
1e00 24 6c 6f 63 61 6c 68 6f 73 74 20 3d 20 27 6c 6f 63 61 6c 68 6f 73 74 27 3b 0a 0a 20 20 20 20 2f $localhost.=.'localhost';....../
1e20 2a 2a 0a 20 20 20 20 20 2a 20 4c 69 73 74 20 6f 66 20 73 75 70 70 6f 72 74 65 64 20 61 75 74 68 **......*.List.of.supported.auth
1e40 65 6e 74 69 63 61 74 69 6f 6e 20 6d 65 74 68 6f 64 73 2c 20 69 6e 20 70 72 65 66 65 72 65 6e 74 entication.methods,.in.preferent
1e60 69 61 6c 20 6f 72 64 65 72 2e 0a 20 20 20 20 20 2a 20 40 76 61 72 20 61 72 72 61 79 0a 20 20 20 ial.order.......*.@var.array....
1e80 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 76 ..*.@access.public......*/.....v
1ea0 61 72 20 24 61 75 74 68 5f 6d 65 74 68 6f 64 73 20 3d 20 61 72 72 61 79 28 27 44 49 47 45 53 54 ar.$auth_methods.=.array('DIGEST
1ec0 2d 4d 44 35 27 2c 20 27 43 52 41 4d 2d 4d 44 35 27 2c 20 27 4c 4f 47 49 4e 27 2c 20 27 50 4c 41 -MD5',.'CRAM-MD5',.'LOGIN',.'PLA
1ee0 49 4e 27 29 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 68 6f 75 6c 64 20 64 65 62 IN');....../**......*.Should.deb
1f00 75 67 67 69 6e 67 20 6f 75 74 70 75 74 20 62 65 20 65 6e 61 62 6c 65 64 3f 0a 20 20 20 20 20 2a ugging.output.be.enabled?......*
1f20 20 40 76 61 72 20 62 6f 6f 6c 65 61 6e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 72 69 .@var.boolean......*.@access.pri
1f40 76 61 74 65 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 76 61 72 20 24 5f 64 65 62 75 67 20 3d 20 66 vate......*/.....var.$_debug.=.f
1f60 61 6c 73 65 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 54 68 65 20 73 6f 63 6b 65 74 alse;....../**......*.The.socket
1f80 20 72 65 73 6f 75 72 63 65 20 62 65 69 6e 67 20 75 73 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 .resource.being.used.to.connect.
1fa0 74 6f 20 74 68 65 20 53 4d 54 50 20 73 65 72 76 65 72 2e 0a 20 20 20 20 20 2a 20 40 76 61 72 20 to.the.SMTP.server.......*.@var.
1fc0 72 65 73 6f 75 72 63 65 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 72 69 76 61 74 65 0a resource......*.@access.private.
1fe0 20 20 20 20 20 2a 2f 0a 20 20 20 20 76 61 72 20 24 5f 73 6f 63 6b 65 74 20 3d 20 6e 75 6c 6c 3b .....*/.....var.$_socket.=.null;
2000 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 54 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 ....../**......*.The.most.recent
2020 20 73 65 72 76 65 72 20 72 65 73 70 6f 6e 73 65 20 63 6f 64 65 2e 0a 20 20 20 20 20 2a 20 40 76 .server.response.code.......*.@v
2040 61 72 20 69 6e 74 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 72 69 76 61 74 65 0a 20 20 ar.int......*.@access.private...
2060 20 20 20 2a 2f 0a 20 20 20 20 76 61 72 20 24 5f 63 6f 64 65 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 ...*/.....var.$_code.=.-1;......
2080 2f 2a 2a 0a 20 20 20 20 20 2a 20 54 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 72 76 65 /**......*.The.most.recent.serve
20a0 72 20 72 65 73 70 6f 6e 73 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 20 20 20 2a 20 40 76 61 r.response.arguments.......*.@va
20c0 72 20 61 72 72 61 79 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 72 69 76 61 74 65 0a 20 r.array......*.@access.private..
20e0 20 20 20 20 2a 2f 0a 20 20 20 20 76 61 72 20 24 5f 61 72 67 75 6d 65 6e 74 73 20 3d 20 61 72 72 ....*/.....var.$_arguments.=.arr
2100 61 79 28 29 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 74 6f 72 65 73 20 64 65 74 ay();....../**......*.Stores.det
2120 65 63 74 65 64 20 66 65 61 74 75 72 65 73 20 6f 66 20 74 68 65 20 53 4d 54 50 20 73 65 72 76 65 ected.features.of.the.SMTP.serve
2140 72 2e 0a 20 20 20 20 20 2a 20 40 76 61 72 20 61 72 72 61 79 0a 20 20 20 20 20 2a 20 40 61 63 63 r.......*.@var.array......*.@acc
2160 65 73 73 20 70 72 69 76 61 74 65 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 76 61 72 20 24 5f 65 73 ess.private......*/.....var.$_es
2180 6d 74 70 20 3d 20 61 72 72 61 79 28 29 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 49 mtp.=.array();....../**......*.I
21a0 6e 73 74 61 6e 74 69 61 74 65 73 20 61 20 6e 65 77 20 4e 65 74 5f 53 4d 54 50 20 6f 62 6a 65 63 nstantiates.a.new.Net_SMTP.objec
21c0 74 2c 20 6f 76 65 72 72 69 64 69 6e 67 20 61 6e 79 20 64 65 66 61 75 6c 74 73 0a 20 20 20 20 20 t,.overriding.any.defaults......
21e0 2a 20 77 69 74 68 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72 65 20 70 61 73 73 65 *.with.parameters.that.are.passe
2200 64 20 69 6e 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e d.in.......*......*.@param.strin
2220 67 20 54 68 65 20 73 65 72 76 65 72 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 2e 0a 20 20 20 20 g.The.server.to.connect.to......
2240 20 2a 20 40 70 61 72 61 6d 20 69 6e 74 20 54 68 65 20 70 6f 72 74 20 74 6f 20 63 6f 6e 6e 65 63 .*.@param.int.The.port.to.connec
2260 74 20 74 6f 2e 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 76 t.to.......*.@param.string.The.v
2280 61 6c 75 65 20 74 6f 20 67 69 76 65 20 77 68 65 6e 20 73 65 6e 64 69 6e 67 20 45 48 4c 4f 20 6f alue.to.give.when.sending.EHLO.o
22a0 72 20 48 45 4c 4f 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 20 70 r.HELO.......*......*.@access..p
22c0 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 20 31 2e 30 0a 20 20 20 20 20 2a ublic......*.@since...1.0......*
22e0 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 4e 65 74 5f 53 4d 54 50 28 24 68 6f 73 74 20 3d 20 /.....function.Net_SMTP($host.=.
2300 6e 75 6c 6c 2c 20 24 70 6f 72 74 20 3d 20 6e 75 6c 6c 2c 20 24 6c 6f 63 61 6c 68 6f 73 74 20 3d null,.$port.=.null,.$localhost.=
2320 20 6e 75 6c 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 .null).....{.........if.(isset($
2340 68 6f 73 74 29 29 20 24 74 68 69 73 2d 3e 68 6f 73 74 20 3d 20 24 68 6f 73 74 3b 0a 20 20 20 20 host)).$this->host.=.$host;.....
2360 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 70 6f 72 74 29 29 20 24 74 68 69 73 2d 3e 70 6f 72 ....if.(isset($port)).$this->por
2380 74 20 3d 20 24 70 6f 72 74 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 65 74 28 24 6c 6f t.=.$port;.........if.(isset($lo
23a0 63 61 6c 68 6f 73 74 29 29 20 24 74 68 69 73 2d 3e 6c 6f 63 61 6c 68 6f 73 74 20 3d 20 24 6c 6f calhost)).$this->localhost.=.$lo
23c0 63 61 6c 68 6f 73 74 3b 0a 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 5f 73 6f 63 6b 65 74 calhost;..........$this->_socket
23e0 20 3d 20 6e 65 77 20 4e 65 74 5f 53 6f 63 6b 65 74 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a .=.new.Net_Socket();........../*
2400 0a 20 20 20 20 20 20 20 20 20 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 41 75 74 68 5f 53 41 53 ..........*.Include.the.Auth_SAS
2420 4c 20 70 61 63 6b 61 67 65 2e 20 20 49 66 20 74 68 65 20 70 61 63 6b 61 67 65 20 69 73 20 6e 6f L.package...If.the.package.is.no
2440 74 20 61 76 61 69 6c 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 2a 20 77 65 20 64 69 73 61 62 t.available,..........*.we.disab
2460 6c 65 20 74 68 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6d 65 74 68 6f 64 73 20 74 68 le.the.authentication.methods.th
2480 61 74 20 64 65 70 65 6e 64 20 75 70 6f 6e 20 69 74 2e 0a 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 at.depend.upon.it...........*/..
24a0 20 20 20 20 20 20 20 69 66 20 28 28 40 69 6e 63 6c 75 64 65 5f 6f 6e 63 65 20 27 41 75 74 68 2f .......if.((@include_once.'Auth/
24c0 53 41 53 4c 2e 70 68 70 27 29 20 3d 3d 3d 20 66 61 6c 73 65 29 20 7b 0a 20 20 20 20 20 20 20 20 SASL.php').===.false).{.........
24e0 20 20 20 20 24 70 6f 73 20 3d 20 61 72 72 61 79 5f 73 65 61 72 63 68 28 27 44 49 47 45 53 54 2d ....$pos.=.array_search('DIGEST-
2500 4d 44 35 27 2c 20 24 74 68 69 73 2d 3e 61 75 74 68 5f 6d 65 74 68 6f 64 73 29 3b 0a 20 20 20 20 MD5',.$this->auth_methods);.....
2520 20 20 20 20 20 20 20 20 75 6e 73 65 74 28 24 74 68 69 73 2d 3e 61 75 74 68 5f 6d 65 74 68 6f 64 ........unset($this->auth_method
2540 73 5b 24 70 6f 73 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6f 73 20 3d 20 61 72 72 s[$pos]);.............$pos.=.arr
2560 61 79 5f 73 65 61 72 63 68 28 27 43 52 41 4d 2d 4d 44 35 27 2c 20 24 74 68 69 73 2d 3e 61 75 74 ay_search('CRAM-MD5',.$this->aut
2580 68 5f 6d 65 74 68 6f 64 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 28 24 74 h_methods);.............unset($t
25a0 68 69 73 2d 3e 61 75 74 68 5f 6d 65 74 68 6f 64 73 5b 24 70 6f 73 5d 29 3b 0a 20 20 20 20 20 20 his->auth_methods[$pos]);.......
25c0 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 74 20 74 68 ..}.....}....../**......*.Set.th
25e0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 62 75 67 67 69 6e 67 20 66 6c 61 67 2e 0a 20 e.value.of.the.debugging.flag...
2600 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 62 6f 6f 6c 65 61 6e 20 24 64 ....*......*.@param...boolean.$d
2620 65 62 75 67 20 20 20 20 20 20 4e 65 77 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 64 65 62 75 ebug......New.value.for.the.debu
2640 67 67 69 6e 67 20 66 6c 61 67 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 gging.flag.......*......*.@acces
2660 73 20 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 20 31 2e 31 2e 30 0a s..public......*.@since...1.1.0.
2680 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 65 74 44 65 62 75 67 28 24 64 .....*/.....function.setDebug($d
26a0 65 62 75 67 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 5f 64 65 62 75 ebug).....{.........$this->_debu
26c0 67 20 3d 20 24 64 65 62 75 67 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 g.=.$debug;.....}....../**......
26e0 2a 20 53 65 6e 64 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 6f 66 20 64 61 74 61 20 *.Send.the.given.string.of.data.
2700 74 6f 20 74 68 65 20 73 65 72 76 65 72 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 to.the.server.......*......*.@pa
2720 72 61 6d 20 20 20 73 74 72 69 6e 67 20 20 24 64 61 74 61 20 20 20 20 20 20 20 54 68 65 20 73 74 ram...string..$data.......The.st
2740 72 69 6e 67 20 6f 66 20 64 61 74 61 20 74 6f 20 73 65 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 ring.of.data.to.send.......*....
2760 20 20 2a 20 40 72 65 74 75 72 6e 20 20 6d 69 78 65 64 20 20 20 54 72 75 65 20 6f 6e 20 73 75 63 ..*.@return..mixed...True.on.suc
2780 63 65 73 73 20 6f 72 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 6f 62 6a 65 63 74 20 6f 6e 20 66 cess.or.a.PEAR_Error.object.on.f
27a0 61 69 6c 75 72 65 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 20 70 ailure.......*......*.@access..p
27c0 72 69 76 61 74 65 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 20 31 2e 31 2e 30 0a 20 20 20 rivate......*.@since...1.1.0....
27e0 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 73 65 6e 64 28 24 64 61 74 61 29 0a 20 ..*/.....function._send($data)..
2800 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 2d 3e 5f 64 65 62 75 67 29 20 ...{.........if.($this->_debug).
2820 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 44 45 42 55 47 3a 20 53 65 6e 64 3a {.............echo."DEBUG:.Send:
2840 20 24 64 61 74 61 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 .$data\n";.........}..........if
2860 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e .(PEAR::isError($error.=.$this->
2880 5f 73 6f 63 6b 65 74 2d 3e 77 72 69 74 65 28 24 64 61 74 61 29 29 29 20 7b 0a 20 20 20 20 20 20 _socket->write($data))).{.......
28a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 45 41 52 5f 45 72 72 6f 72 28 27 46 61 69 ......return.new.PEAR_Error('Fai
28c0 6c 65 64 20 74 6f 20 77 72 69 74 65 20 74 6f 20 73 6f 63 6b 65 74 3a 20 27 20 2e 0a 20 20 20 20 led.to.write.to.socket:.'.......
28e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 ..............................$e
2900 72 72 6f 72 2d 3e 67 65 74 4d 65 73 73 61 67 65 28 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a rror->getMessage());.........}..
2920 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ........return.true;.....}......
2940 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 61 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 74 68 65 /**......*.Send.a.command.to.the
2960 20 73 65 72 76 65 72 20 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 73 74 72 69 6e 67 20 .server.with.an.optional.string.
2980 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20 20 20 20 20 2a 20 41 20 63 61 72 72 69 61 67 65 20 of.arguments.......*.A.carriage.
29a0 72 65 74 75 72 6e 20 2f 20 6c 69 6e 65 66 65 65 64 20 28 43 52 4c 46 29 20 73 65 71 75 65 6e 63 return./.linefeed.(CRLF).sequenc
29c0 65 20 77 69 6c 6c 20 62 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20 65 61 63 68 0a 20 20 20 20 20 e.will.be.appended.to.each......
29e0 2a 20 63 6f 6d 6d 61 6e 64 20 73 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 73 65 *.command.string.before.it.is.se
2a00 6e 74 20 74 6f 20 74 68 65 20 53 4d 54 50 20 73 65 72 76 65 72 2e 0a 20 20 20 20 20 2a 0a 20 20 nt.to.the.SMTP.server.......*...
2a20 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 73 74 72 69 6e 67 20 20 24 63 6f 6d 6d 61 6e 64 20 20 ...*.@param...string..$command..
2a40 20 20 54 68 65 20 53 4d 54 50 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 73 65 6e 64 20 74 6f 20 74 68 ..The.SMTP.command.to.send.to.th
2a60 65 20 73 65 72 76 65 72 2e 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 73 74 72 69 6e 67 e.server.......*.@param...string
2a80 20 20 24 61 72 67 73 20 20 20 20 20 20 20 41 20 73 74 72 69 6e 67 20 6f 66 20 6f 70 74 69 6f 6e ..$args.......A.string.of.option
2aa0 61 6c 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 70 70 65 6e 64 0a 20 20 20 20 20 2a 20 20 20 al.arguments.to.append......*...
2ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 20 74 68 ...........................to.th
2ae0 65 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e e.command.......*......*.@return
2b00 20 20 6d 69 78 65 64 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 5f 73 65 6e ..mixed...The.result.of.the._sen
2b20 64 28 29 20 63 61 6c 6c 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 d().call.......*......*.@access.
2b40 20 70 72 69 76 61 74 65 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 20 31 2e 31 2e 30 0a 20 .private......*.@since...1.1.0..
2b60 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 70 75 74 28 24 63 6f 6d 6d 61 6e ....*/.....function._put($comman
2b80 64 2c 20 24 61 72 67 73 20 3d 20 27 27 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 d,.$args.=.'').....{.........if.
2ba0 28 21 65 6d 70 74 79 28 24 61 72 67 73 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 (!empty($args)).{.............re
2bc0 74 75 72 6e 20 24 74 68 69 73 2d 3e 5f 73 65 6e 64 28 24 63 6f 6d 6d 61 6e 64 20 2e 20 27 20 27 turn.$this->_send($command...'.'
2be0 20 2e 20 24 61 72 67 73 20 2e 20 22 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 ...$args..."\r\n");.........}...
2c00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 74 68 69 73 2d 3e 5f 73 65 6e 64 28 24 63 6f 6d 6d .......return.$this->_send($comm
2c20 61 6e 64 20 2e 20 22 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 and..."\r\n");.....}....../**...
2c40 20 20 20 2a 20 52 65 61 64 20 61 20 72 65 70 6c 79 20 66 72 6f 6d 20 74 68 65 20 53 4d 54 50 20 ...*.Read.a.reply.from.the.SMTP.
2c60 73 65 72 76 65 72 2e 20 20 54 68 65 20 72 65 70 6c 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 server...The.reply.consists.of.a
2c80 20 72 65 73 70 6f 6e 73 65 0a 20 20 20 20 20 2a 20 63 6f 64 65 20 61 6e 64 20 61 20 72 65 73 70 .response......*.code.and.a.resp
2ca0 6f 6e 73 65 20 6d 65 73 73 61 67 65 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 onse.message.......*......*.@par
2cc0 61 6d 20 20 20 6d 69 78 65 64 20 20 20 24 76 61 6c 69 64 20 20 20 20 20 20 54 68 65 20 73 65 74 am...mixed...$valid......The.set
2ce0 20 6f 66 20 76 61 6c 69 64 20 72 65 73 70 6f 6e 73 65 20 63 6f 64 65 73 2e 20 20 54 68 65 73 65 .of.valid.response.codes...These
2d00 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ......*.........................
2d20 20 20 20 20 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 6e 20 61 72 72 61 .....may.be.specified.as.an.arra
2d40 79 20 6f 66 20 69 6e 74 65 67 65 72 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 y.of.integer......*.............
2d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 6f 72 20 61 73 20 61 20 .................values.or.as.a.
2d80 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 2a 0a 20 20 20 single.integer.value.......*....
2da0 20 20 2a 20 40 72 65 74 75 72 6e 20 20 6d 69 78 65 64 20 20 20 54 72 75 65 20 69 66 20 74 68 65 ..*.@return..mixed...True.if.the
2dc0 20 73 65 72 76 65 72 20 72 65 74 75 72 6e 65 64 20 61 20 76 61 6c 69 64 20 72 65 73 70 6f 6e 73 .server.returned.a.valid.respons
2de0 65 20 63 6f 64 65 20 6f 72 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e.code.or......*................
2e00 20 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 6f 62 6a 65 63 74 20 69 73 20 61 6e 20 65 72 72 6f ..a.PEAR_Error.object.is.an.erro
2e20 72 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 72 65 61 63 68 65 64 2e 0a 20 20 20 20 20 2a 0a 20 r.condition.is.reached.......*..
2e40 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 20 70 72 69 76 61 74 65 0a 20 20 20 20 20 2a 20 40 73 ....*.@access..private......*.@s
2e60 69 6e 63 65 20 20 20 31 2e 31 2e 30 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 73 65 65 20 ince...1.1.0......*......*.@see.
2e80 20 20 20 20 67 65 74 52 65 73 70 6f 6e 73 65 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 ....getResponse......*/.....func
2ea0 74 69 6f 6e 20 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 24 76 61 6c 69 64 29 0a 20 20 20 20 tion._parseResponse($valid).....
2ec0 7b 0a 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 5f 63 6f 64 65 20 3d 20 2d 31 3b 0a 20 20 20 {.........$this->_code.=.-1;....
2ee0 20 20 20 20 20 24 74 68 69 73 2d 3e 5f 61 72 67 75 6d 65 6e 74 73 20 3d 20 61 72 72 61 79 28 29 .....$this->_arguments.=.array()
2f00 3b 0a 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 24 6c 69 6e 65 20 3d 20 24 74 68 69 73 2d ;..........while.($line.=.$this-
2f20 3e 5f 73 6f 63 6b 65 74 2d 3e 72 65 61 64 4c 69 6e 65 28 29 29 20 7b 0a 20 20 20 20 20 20 20 20 >_socket->readLine()).{.........
2f40 20 20 20 20 69 66 20 28 24 74 68 69 73 2d 3e 5f 64 65 62 75 67 29 20 7b 0a 20 20 20 20 20 20 20 ....if.($this->_debug).{........
2f60 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 44 45 42 55 47 3a 20 52 65 63 76 3a 20 24 6c 69 6e .........echo."DEBUG:.Recv:.$lin
2f80 65 5c 6e 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 e\n";.............}.............
2fa0 20 2f 2a 20 49 66 20 77 65 20 72 65 63 65 69 76 65 20 61 6e 20 65 6d 70 74 79 20 6c 69 6e 65 2c ./*.If.we.receive.an.empty.line,
2fc0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 63 6c 6f 73 65 64 2e .the.connection.has.been.closed.
2fe0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6d 70 74 79 28 24 6c 69 6e 65 29 .*/.............if.(empty($line)
3000 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 69 73 63 6f ).{.................$this->disco
3020 6e 6e 65 63 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 nnect();.................return.
3040 6e 65 77 20 50 45 41 52 5f 45 72 72 6f 72 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 75 new.PEAR_Error("Connection.was.u
3060 6e 65 78 70 65 63 74 65 64 6c 79 20 63 6c 6f 73 65 64 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 nexpectedly.closed");...........
3080 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 63 6f 64 ..}............../*.Read.the.cod
30a0 65 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 74 20 69 6e 20 74 68 65 20 61 72 67 75 e.and.store.the.rest.in.the.argu
30c0 6d 65 6e 74 73 20 61 72 72 61 79 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 64 ments.array..*/.............$cod
30e0 65 20 3d 20 73 75 62 73 74 72 28 24 6c 69 6e 65 2c 20 30 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 e.=.substr($line,.0,.3);........
3100 20 20 20 20 20 24 74 68 69 73 2d 3e 5f 61 72 67 75 6d 65 6e 74 73 5b 5d 20 3d 20 74 72 69 6d 28 .....$this->_arguments[].=.trim(
3120 73 75 62 73 74 72 28 24 6c 69 6e 65 2c 20 34 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 substr($line,.4));..............
3140 2f 2a 20 43 68 65 63 6b 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 72 65 73 70 6f /*.Check.the.syntax.of.the.respo
3160 6e 73 65 20 63 6f 64 65 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73 5f nse.code..*/.............if.(is_
3180 6e 75 6d 65 72 69 63 28 24 63 6f 64 65 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 numeric($code)).{...............
31a0 20 20 24 74 68 69 73 2d 3e 5f 63 6f 64 65 20 3d 20 28 69 6e 74 29 24 63 6f 64 65 3b 0a 20 20 20 ..$this->_code.=.(int)$code;....
31c0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........}.else.{...............
31e0 20 20 24 74 68 69 73 2d 3e 5f 63 6f 64 65 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 20 20 20 ..$this->_code.=.-1;............
3200 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 .....break;.............}.......
3220 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74 69 ......./*.If.this.is.not.a.multi
3240 6c 69 6e 65 20 72 65 73 70 6f 6e 73 65 2c 20 77 65 27 72 65 20 64 6f 6e 65 2e 20 2a 2f 0a 20 20 line.response,.we're.done..*/...
3260 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 73 74 72 28 24 6c 69 6e 65 2c 20 33 2c 20 31 ..........if.(substr($line,.3,.1
3280 29 20 21 3d 20 27 2d 27 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 ).!=.'-').{.................brea
32a0 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 k;.............}.........}......
32c0 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 73 65 72 76 65 72 27 73 20 72 65 73 70 ..../*.Compare.the.server's.resp
32e0 6f 6e 73 65 20 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 76 61 6c 69 64 20 63 6f 64 65 2e 20 2a onse.code.with.the.valid.code..*
3300 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 5f 69 6e 74 28 24 76 61 6c 69 64 29 20 26 26 20 /.........if.(is_int($valid).&&.
3320 28 24 74 68 69 73 2d 3e 5f 63 6f 64 65 20 3d 3d 3d 20 24 76 61 6c 69 64 29 29 20 7b 0a 20 20 20 ($this->_code.===.$valid)).{....
3340 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a .........return.true;.........}.
3360 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 77 65 72 65 20 67 69 76 65 6e 20 61 6e 20 ........./*.If.we.were.given.an.
3380 61 72 72 61 79 20 6f 66 20 76 61 6c 69 64 20 72 65 73 70 6f 6e 73 65 20 63 6f 64 65 73 2c 20 63 array.of.valid.response.codes,.c
33a0 68 65 63 6b 20 65 61 63 68 20 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 heck.each.one..*/.........if.(is
33c0 5f 61 72 72 61 79 28 24 76 61 6c 69 64 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f _array($valid)).{.............fo
33e0 72 65 61 63 68 20 28 24 76 61 6c 69 64 20 61 73 20 24 76 61 6c 69 64 5f 63 6f 64 65 29 20 7b 0a reach.($valid.as.$valid_code).{.
3400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 2d 3e 5f 63 6f 64 65 ................if.($this->_code
3420 20 3d 3d 3d 20 24 76 61 6c 69 64 5f 63 6f 64 65 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 .===.$valid_code).{.............
3440 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 ........return.true;............
3460 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a .....}.............}.........}..
3480 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 45 41 52 5f 45 72 72 6f 72 28 22 49 ........return.new.PEAR_Error("I
34a0 6e 76 61 6c 69 64 20 72 65 73 70 6f 6e 73 65 20 63 6f 64 65 20 72 65 63 65 69 76 65 64 20 66 72 nvalid.response.code.received.fr
34c0 6f 6d 20 73 65 72 76 65 72 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 om.server");.....}....../**.....
34e0 20 2a 20 52 65 74 75 72 6e 20 61 20 32 2d 74 75 70 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 .*.Return.a.2-tuple.containing.t
3500 68 65 20 6c 61 73 74 20 72 65 73 70 6f 6e 73 65 20 66 72 6f 6d 20 74 68 65 20 53 4d 54 50 20 73 he.last.response.from.the.SMTP.s
3520 65 72 76 65 72 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 20 61 72 erver.......*......*.@return..ar
3540 72 61 79 20 20 20 41 20 74 77 6f 2d 65 6c 65 6d 65 6e 74 20 61 72 72 61 79 3a 20 74 68 65 20 66 ray...A.two-element.array:.the.f
3560 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 20 20 20 20 20 2a irst.element.contains.the......*
3580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 70 6f 6e 73 65 20 63 6f 64 65 20 ..................response.code.
35a0 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 20 65 6c 65 as.an.integer.and.the.second.ele
35c0 6d 65 6e 74 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e ment......*..................con
35e0 74 61 69 6e 73 20 74 68 65 20 72 65 73 70 6f 6e 73 65 27 73 20 61 72 67 75 6d 65 6e 74 73 20 61 tains.the.response's.arguments.a
3600 73 20 61 20 73 74 72 69 6e 67 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 s.a.string.......*......*.@acces
3620 73 20 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 20 31 2e 31 2e 30 0a s..public......*.@since...1.1.0.
3640 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 67 65 74 52 65 73 70 6f 6e 73 65 .....*/.....function.getResponse
3660 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 72 61 79 28 24 74 ().....{.........return.array($t
3680 68 69 73 2d 3e 5f 63 6f 64 65 2c 20 6a 6f 69 6e 28 22 5c 6e 22 2c 20 24 74 68 69 73 2d 3e 5f 61 his->_code,.join("\n",.$this->_a
36a0 72 67 75 6d 65 6e 74 73 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 rguments));.....}....../**......
36c0 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 53 4d 54 50 *.Attempt.to.connect.to.the.SMTP
36e0 20 73 65 72 76 65 72 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 20 20 .server.......*......*.@param...
3700 69 6e 74 20 20 20 20 20 24 74 69 6d 65 6f 75 74 20 20 20 20 54 68 65 20 74 69 6d 65 6f 75 74 20 int.....$timeout....The.timeout.
3720 76 61 6c 75 65 20 28 69 6e 20 73 65 63 6f 6e 64 73 29 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 value.(in.seconds).for.the......
3740 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 *..............................s
3760 6f 63 6b 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 ocket.connection.......*......*.
3780 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 @return.mixed.Returns.a.PEAR_Err
37a0 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a or.with.an.error.message.on.any.
37c0 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 .....*...............kind.of.fai
37e0 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a lure,.or.true.on.success.......*
3800 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 .@access.public......*.@since..1
3820 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 28 .0......*/.....function.connect(
3840 24 74 69 6d 65 6f 75 74 20 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 24 $timeout.=.null).....{.........$
3860 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 5f 73 6f 63 6b 65 74 2d 3e 63 6f 6e 6e 65 63 74 result.=.$this->_socket->connect
3880 28 24 74 68 69 73 2d 3e 68 6f 73 74 2c 20 24 74 68 69 73 2d 3e 70 6f 72 74 2c 0a 20 20 20 20 20 ($this->host,.$this->port,......
38a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
38c0 20 20 20 20 20 66 61 6c 73 65 2c 20 24 74 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 69 .....false,.$timeout);.........i
38e0 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 72 65 73 75 6c 74 29 29 20 7b 0a 20 20 20 f.(PEAR::isError($result)).{....
3900 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 45 41 52 5f 45 72 72 6f 72 28 27 .........return.new.PEAR_Error('
3920 46 61 69 6c 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 73 6f 63 6b 65 74 3a 20 27 20 2e 0a 20 20 Failed.to.connect.socket:.'.....
3940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
3960 24 72 65 73 75 6c 74 2d 3e 67 65 74 4d 65 73 73 61 67 65 28 29 29 3b 0a 20 20 20 20 20 20 20 20 $result->getMessage());.........
3980 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 }..........if.(PEAR::isError($er
39a0 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 32 30 29 ror.=.$this->_parseResponse(220)
39c0 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a )).{.............return.$error;.
39e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 ........}.........if.(PEAR::isEr
3a00 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 6e 65 67 6f 74 69 61 74 65 28 29 ror($error.=.$this->_negotiate()
3a20 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a )).{.............return.$error;.
3a40 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a ........}..........return.true;.
3a60 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 41 74 74 65 6d 70 74 20 74 6f ....}....../**......*.Attempt.to
3a80 20 64 69 73 63 6f 6e 6e 65 63 74 20 66 72 6f 6d 20 74 68 65 20 53 4d 54 50 20 73 65 72 76 65 72 .disconnect.from.the.SMTP.server
3aa0 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 .......*......*.@return.mixed.Re
3ac0 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 turns.a.PEAR_Error.with.an.error
3ae0 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 .message.on.any......*..........
3b00 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e .....kind.of.failure,.or.true.on
3b20 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a .success.......*.@access.public.
3b40 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 .....*.@since..1.0......*/.....f
3b60 75 6e 63 74 69 6f 6e 20 64 69 73 63 6f 6e 6e 65 63 74 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 unction.disconnect().....{......
3b80 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 ...if.(PEAR::isError($error.=.$t
3ba0 68 69 73 2d 3e 5f 70 75 74 28 27 51 55 49 54 27 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 his->_put('QUIT'))).{...........
3bc0 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 ..return.$error;.........}......
3be0 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 ...if.(PEAR::isError($error.=.$t
3c00 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 32 31 29 29 29 20 7b 0a 20 20 20 his->_parseResponse(221))).{....
3c20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 .........return.$error;.........
3c40 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 }.........if.(PEAR::isError($err
3c60 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 73 6f 63 6b 65 74 2d 3e 64 69 73 63 6f 6e 6e 65 63 74 28 or.=.$this->_socket->disconnect(
3c80 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 45 41 ))).{.............return.new.PEA
3ca0 52 5f 45 72 72 6f 72 28 27 46 61 69 6c 65 64 20 74 6f 20 64 69 73 63 6f 6e 6e 65 63 74 20 73 6f R_Error('Failed.to.disconnect.so
3cc0 63 6b 65 74 3a 20 27 20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 cket:.'.........................
3ce0 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 2d 3e 67 65 74 4d 65 73 73 61 67 65 28 29 ............$error->getMessage()
3d00 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 );.........}..........return.tru
3d20 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 41 74 74 65 6d 70 74 e;.....}....../**......*.Attempt
3d40 20 74 6f 20 73 65 6e 64 20 74 68 65 20 45 48 4c 4f 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 6f 62 .to.send.the.EHLO.command.and.ob
3d60 74 61 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 45 53 4d 54 50 0a 20 20 20 20 20 2a 20 65 78 74 65 tain.a.list.of.ESMTP......*.exte
3d80 6e 73 69 6f 6e 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 61 6e 64 20 66 61 69 6c 69 6e 67 20 74 68 nsions.available,.and.failing.th
3da0 61 74 20 6a 75 73 74 20 73 65 6e 64 20 48 45 4c 4f 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a at.just.send.HELO.......*......*
3dc0 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 .@return.mixed.Returns.a.PEAR_Er
3de0 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 ror.with.an.error.message.on.any
3e00 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 ......*...............kind.of.fa
3e20 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 ilure,.or.true.on.success.......
3e40 2a 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 72 69 76 61 74 65 0a 20 20 20 20 20 2a 20 *......*.@access.private......*.
3e60 40 73 69 6e 63 65 20 20 31 2e 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 @since..1.1.0......*/.....functi
3e80 6f 6e 20 5f 6e 65 67 6f 74 69 61 74 65 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 on._negotiate().....{.........if
3ea0 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e .(PEAR::isError($error.=.$this->
3ec0 5f 70 75 74 28 27 45 48 4c 4f 27 2c 20 24 74 68 69 73 2d 3e 6c 6f 63 61 6c 68 6f 73 74 29 29 29 _put('EHLO',.$this->localhost)))
3ee0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 .{.............return.$error;...
3f00 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 ......}..........if.(PEAR::isErr
3f20 6f 72 28 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 30 29 29 29 20 or($this->_parseResponse(250))).
3f40 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65 63 65 69 76 65 20 61 {............./*.If.we.receive.a
3f60 20 35 30 33 20 72 65 73 70 6f 6e 73 65 2c 20 77 65 27 72 65 20 61 6c 72 65 61 64 79 20 61 75 74 .503.response,.we're.already.aut
3f80 68 65 6e 74 69 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 henticated..*/.............if.($
3fa0 74 68 69 73 2d 3e 5f 63 6f 64 65 20 3d 3d 3d 20 35 30 33 29 20 7b 0a 20 20 20 20 20 20 20 20 20 this->_code.===.503).{..........
3fc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 .......return.true;.............
3fe0 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 45 48 4c 4f 20 66 61 }............../*.If.the.EHLO.fa
4000 69 6c 65 64 2c 20 74 72 79 20 74 68 65 20 73 69 6d 70 6c 65 72 20 48 45 4c 4f 20 63 6f 6d 6d 61 iled,.try.the.simpler.HELO.comma
4020 6e 64 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 nd..*/.............if.(PEAR::isE
4040 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 48 45 4c 4f 27 rror($error.=.$this->_put('HELO'
4060 2c 20 24 74 68 69 73 2d 3e 6c 6f 63 61 6c 68 6f 73 74 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 ,.$this->localhost))).{.........
4080 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 ........return.$error;..........
40a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 ...}.............if.(PEAR::isErr
40c0 6f 72 28 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 30 29 29 29 20 or($this->_parseResponse(250))).
40e0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 45 41 {.................return.new.PEA
4100 52 5f 45 72 72 6f 72 28 27 48 45 4c 4f 20 77 61 73 20 6e 6f 74 20 61 63 63 65 70 74 65 64 3a 20 R_Error('HELO.was.not.accepted:.
4120 27 2c 20 24 74 68 69 73 2d 3e 5f 63 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a ',.$this->_code);.............}.
4140 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 .............return.true;.......
4160 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 74 68 69 73 2d 3e 5f 61 72 ..}..........foreach.($this->_ar
4180 67 75 6d 65 6e 74 73 20 61 73 20 24 61 72 67 75 6d 65 6e 74 29 20 7b 0a 20 20 20 20 20 20 20 20 guments.as.$argument).{.........
41a0 20 20 20 20 24 76 65 72 62 20 3d 20 73 74 72 74 6f 6b 28 24 61 72 67 75 6d 65 6e 74 2c 20 27 20 ....$verb.=.strtok($argument,.'.
41c0 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 67 75 6d 65 6e 74 73 20 3d 20 73 75 62 ');.............$arguments.=.sub
41e0 73 74 72 28 24 61 72 67 75 6d 65 6e 74 2c 20 73 74 72 6c 65 6e 28 24 76 65 72 62 29 20 2b 20 31 str($argument,.strlen($verb).+.1
4200 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,...............................
4220 20 20 73 74 72 6c 65 6e 28 24 61 72 67 75 6d 65 6e 74 29 20 2d 20 73 74 72 6c 65 6e 28 24 76 65 ..strlen($argument).-.strlen($ve
4240 72 62 29 20 2d 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 68 69 73 2d 3e 5f 65 73 rb).-.1);.............$this->_es
4260 6d 74 70 5b 24 76 65 72 62 5d 20 3d 20 24 61 72 67 75 6d 65 6e 74 73 3b 0a 20 20 20 20 20 20 20 mtp[$verb].=.$arguments;........
4280 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a .}..........return.true;.....}..
42a0 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 ..../**......*.Returns.the.name.
42c0 6f 66 20 74 68 65 20 62 65 73 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6d 65 74 68 6f of.the.best.authentication.metho
42e0 64 20 74 68 61 74 20 74 68 65 20 73 65 72 76 65 72 0a 20 20 20 20 20 2a 20 68 61 73 20 61 64 76 d.that.the.server......*.has.adv
4300 65 72 74 69 73 65 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d ertised.......*......*.@return.m
4320 69 78 65 64 20 20 20 20 52 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e ixed....Returns.a.string.contain
4340 69 6e 67 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 62 65 73 74 0a 20 20 20 20 20 2a 20 ing.the.name.of.the.best......*.
4360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 70 70 6f 72 74 65 64 20 61 75 74 68 65 .................supported.authe
4380 6e 74 69 63 61 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 72 20 61 20 50 45 41 52 5f 45 72 72 6f 72 ntication.method.or.a.PEAR_Error
43a0 20 6f 62 6a 65 63 74 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .object......*..................
43c0 69 66 20 61 20 66 61 69 6c 75 72 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 65 6e 63 6f 75 6e if.a.failure.condition.is.encoun
43e0 74 65 72 65 64 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 72 69 76 61 74 65 0a 20 20 tered.......*.@access.private...
4400 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 ...*.@since..1.1.0......*/.....f
4420 75 6e 63 74 69 6f 6e 20 5f 67 65 74 42 65 73 74 41 75 74 68 4d 65 74 68 6f 64 28 29 0a 20 20 20 unction._getBestAuthMethod()....
4440 20 7b 0a 20 20 20 20 20 20 20 20 24 61 76 61 69 6c 61 62 6c 65 5f 6d 65 74 68 6f 64 73 20 3d 20 .{.........$available_methods.=.
4460 65 78 70 6c 6f 64 65 28 27 20 27 2c 20 24 74 68 69 73 2d 3e 5f 65 73 6d 74 70 5b 27 41 55 54 48 explode('.',.$this->_esmtp['AUTH
4480 27 5d 29 3b 0a 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 24 74 68 69 73 2d 3e 61 75 ']);..........foreach.($this->au
44a0 74 68 5f 6d 65 74 68 6f 64 73 20 61 73 20 24 6d 65 74 68 6f 64 29 20 7b 0a 20 20 20 20 20 20 20 th_methods.as.$method).{........
44c0 20 20 20 20 20 69 66 20 28 69 6e 5f 61 72 72 61 79 28 24 6d 65 74 68 6f 64 2c 20 24 61 76 61 69 .....if.(in_array($method,.$avai
44e0 6c 61 62 6c 65 5f 6d 65 74 68 6f 64 73 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lable_methods)).{...............
4500 20 20 72 65 74 75 72 6e 20 24 6d 65 74 68 6f 64 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a ..return.$method;.............}.
4520 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 45 ........}..........return.new.PE
4540 41 52 5f 45 72 72 6f 72 28 27 4e 6f 20 73 75 70 70 6f 72 74 65 64 20 61 75 74 68 65 6e 74 69 63 AR_Error('No.supported.authentic
4560 61 74 69 6f 6e 20 6d 65 74 68 6f 64 73 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a ation.methods');.....}....../**.
4580 20 20 20 20 20 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 6f 20 53 4d 54 50 20 61 75 74 68 65 6e .....*.Attempt.to.do.SMTP.authen
45a0 74 69 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 tication.......*......*.@param.s
45c0 74 72 69 6e 67 20 54 68 65 20 75 73 65 72 69 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 tring.The.userid.to.authenticate
45e0 20 61 73 2e 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 70 61 .as.......*.@param.string.The.pa
4600 73 73 77 6f 72 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 77 69 74 68 2e 0a 20 20 20 ssword.to.authenticate.with.....
4620 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 72 65 71 75 65 73 74 65 64 20 ..*.@param.string.The.requested.
4640 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6d 65 74 68 6f 64 2e 20 20 49 66 20 6e 6f 6e 65 20 authentication.method...If.none.
4660 69 73 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 70 65 63 69 66 69 65 is......*...............specifie
4680 64 2c 20 74 68 65 20 62 65 73 74 20 73 75 70 70 6f 72 74 65 64 20 6d 65 74 68 6f 64 20 77 69 6c d,.the.best.supported.method.wil
46a0 6c 20 62 65 20 75 73 65 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e l.be.used.......*......*.@return
46c0 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 .mixed.Returns.a.PEAR_Error.with
46e0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 .an.error.message.on.any......*.
4700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f ..............kind.of.failure,.o
4720 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 r.true.on.success.......*.@acces
4740 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 s.public......*.@since..1.0.....
4760 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 61 75 74 68 28 24 75 69 64 2c 20 24 70 77 64 .*/.....function.auth($uid,.$pwd
4780 20 2c 20 24 6d 65 74 68 6f 64 20 3d 20 27 27 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 .,.$method.=.'').....{.........i
47a0 66 20 28 65 6d 70 74 79 28 24 74 68 69 73 2d 3e 5f 65 73 6d 74 70 5b 27 41 55 54 48 27 5d 29 29 f.(empty($this->_esmtp['AUTH']))
47c0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 45 41 52 5f 45 .{.............return.new.PEAR_E
47e0 72 72 6f 72 28 27 53 4d 54 50 20 73 65 72 76 65 72 20 64 6f 65 73 20 6e 6f 20 73 75 70 70 6f 72 rror('SMTP.server.does.no.suppor
4800 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 t.authentication');.........}...
4820 20 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 2a 20 49 66 20 6e 6f 20 6d 65 74 68 6f ......./*..........*.If.no.metho
4840 64 20 68 61 73 20 62 65 65 6e 20 73 70 65 63 69 66 69 65 64 2c 20 67 65 74 20 74 68 65 20 6e 61 d.has.been.specified,.get.the.na
4860 6d 65 20 6f 66 20 74 68 65 20 62 65 73 74 20 73 75 70 70 6f 72 74 65 64 0a 20 20 20 20 20 20 20 me.of.the.best.supported........
4880 20 20 2a 20 6d 65 74 68 6f 64 20 61 64 76 65 72 74 69 73 65 64 20 62 79 20 74 68 65 20 53 4d 54 ..*.method.advertised.by.the.SMT
48a0 50 20 73 65 72 76 65 72 2e 0a 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 P.server...........*/.........if
48c0 20 28 65 6d 70 74 79 28 24 6d 65 74 68 6f 64 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 .(empty($method)).{.............
48e0 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 6d 65 74 68 6f 64 20 3d 20 24 74 68 69 if.(PEAR::isError($method.=.$thi
4900 73 2d 3e 5f 67 65 74 42 65 73 74 41 75 74 68 4d 65 74 68 6f 64 28 29 29 29 20 7b 0a 20 20 20 20 s->_getBestAuthMethod())).{.....
4920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 74 68 65 20 50 45 41 52 5f 45 ............/*.Return.the.PEAR_E
4940 72 72 6f 72 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 5f 67 65 74 42 65 73 74 41 75 74 68 4d 65 74 rror.object.from._getBestAuthMet
4960 68 6f 64 28 29 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e hod()..*/.................return
4980 20 24 6d 65 74 68 6f 64 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 .$method;.............}.........
49a0 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6d 65 74 68 6f 64 20 3d 20 73 }.else.{.............$method.=.s
49c0 74 72 74 6f 75 70 70 65 72 28 24 6d 65 74 68 6f 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 trtoupper($method);.............
49e0 69 66 20 28 21 69 6e 5f 61 72 72 61 79 28 24 6d 65 74 68 6f 64 2c 20 24 74 68 69 73 2d 3e 61 75 if.(!in_array($method,.$this->au
4a00 74 68 5f 6d 65 74 68 6f 64 73 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 th_methods)).{.................r
4a20 65 74 75 72 6e 20 6e 65 77 20 50 45 41 52 5f 45 72 72 6f 72 28 22 24 6d 65 74 68 6f 64 20 69 73 eturn.new.PEAR_Error("$method.is
4a40 20 6e 6f 74 20 61 20 73 75 70 70 6f 72 74 65 64 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 .not.a.supported.authentication.
4a60 6d 65 74 68 6f 64 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 method");.............}.........
4a80 7d 0a 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 24 6d 65 74 68 6f 64 29 20 7b 0a 20 20 }..........switch.($method).{...
4aa0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 27 44 49 47 45 53 54 2d 4d 44 35 27 3a 0a 20 20 20 ..........case.'DIGEST-MD5':....
4ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 5f 61 .............$result.=.$this->_a
4ae0 75 74 68 44 69 67 65 73 74 5f 4d 44 35 28 24 75 69 64 2c 20 24 70 77 64 29 3b 0a 20 20 20 20 20 uthDigest_MD5($uid,.$pwd);......
4b00 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 ...........break;.............ca
4b20 73 65 20 27 43 52 41 4d 2d 4d 44 35 27 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 se.'CRAM-MD5':.................$
4b40 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 5f 61 75 74 68 43 52 41 4d 5f 4d 44 35 28 24 75 result.=.$this->_authCRAM_MD5($u
4b60 69 64 2c 20 24 70 77 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b id,.$pwd);.................break
4b80 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 27 4c 4f 47 49 4e 27 3a 0a 20 20 20 20 ;.............case.'LOGIN':.....
4ba0 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 24 74 68 69 73 2d 3e 5f 61 75 ............$result.=.$this->_au
4bc0 74 68 4c 6f 67 69 6e 28 24 75 69 64 2c 20 24 70 77 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 thLogin($uid,.$pwd);............
4be0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 27 50 4c .....break;.............case.'PL
4c00 41 49 4e 27 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 3d 20 AIN':.................$result.=.
4c20 24 74 68 69 73 2d 3e 5f 61 75 74 68 50 6c 61 69 6e 28 24 75 69 64 2c 20 24 70 77 64 29 3b 0a 20 $this->_authPlain($uid,.$pwd);..
4c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 ...............break;...........
4c60 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 ..default:.................$resu
4c80 6c 74 20 3d 20 6e 65 77 20 50 45 41 52 5f 45 72 72 6f 72 28 22 24 6d 65 74 68 6f 64 20 69 73 20 lt.=.new.PEAR_Error("$method.is.
4ca0 6e 6f 74 20 61 20 73 75 70 70 6f 72 74 65 64 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6d not.a.supported.authentication.m
4cc0 65 74 68 6f 64 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a ethod");.................break;.
4ce0 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 61 6e 20 65 72 72 6f ........}........../*.If.an.erro
4d00 72 20 77 61 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 72 65 74 75 72 6e 20 74 68 65 20 50 45 r.was.encountered,.return.the.PE
4d20 41 52 5f 45 72 72 6f 72 20 6f 62 6a 65 63 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 AR_Error.object..*/.........if.(
4d40 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 72 65 73 75 6c 74 29 29 20 7b 0a 20 20 20 20 20 20 PEAR::isError($result)).{.......
4d60 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a ......return.$result;.........}.
4d80 0a 20 20 20 20 20 20 20 20 2f 2a 20 52 46 43 2d 32 35 35 34 20 72 65 71 75 69 72 65 73 20 75 73 ........./*.RFC-2554.requires.us
4da0 20 74 6f 20 72 65 2d 6e 65 67 6f 74 69 61 74 65 20 45 53 4d 54 50 20 61 66 74 65 72 20 61 6e 20 .to.re-negotiate.ESMTP.after.an.
4dc0 41 55 54 48 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 AUTH..*/.........if.(PEAR::isErr
4de0 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 6e 65 67 6f 74 69 61 74 65 28 29 29 or($error.=.$this->_negotiate())
4e00 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 ).{.............return.$error;..
4e20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 .......}..........return.true;..
4e40 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 73 20 74 68 65 20 75 ...}....../*.Authenticates.the.u
4e60 73 65 72 20 75 73 69 6e 67 20 74 68 65 20 44 49 47 45 53 54 2d 4d 44 35 20 6d 65 74 68 6f 64 2e ser.using.the.DIGEST-MD5.method.
4e80 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 ......*......*.@param.string.The
4ea0 20 75 73 65 72 69 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 61 73 2e 0a 20 20 20 20 .userid.to.authenticate.as......
4ec0 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 70 61 73 73 77 6f 72 64 20 74 6f .*.@param.string.The.password.to
4ee0 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 77 69 74 68 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 .authenticate.with.......*......
4f00 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 *.@return.mixed.Returns.a.PEAR_E
4f20 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e rror.with.an.error.message.on.an
4f40 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 y......*...............kind.of.f
4f60 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 ailure,.or.true.on.success......
4f80 20 2a 20 40 61 63 63 65 73 73 20 70 72 69 76 61 74 65 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 .*.@access.private......*.@since
4fa0 20 20 31 2e 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 61 75 ..1.1.0......*/.....function._au
4fc0 74 68 44 69 67 65 73 74 5f 4d 44 35 28 24 75 69 64 2c 20 24 70 77 64 29 0a 20 20 20 20 7b 0a 20 thDigest_MD5($uid,.$pwd).....{..
4fe0 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 .......if.(PEAR::isError($error.
5000 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 41 55 54 48 27 2c 20 27 44 49 47 45 53 54 2d 4d 44 =.$this->_put('AUTH',.'DIGEST-MD
5020 35 27 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 5'))).{.............return.$erro
5040 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 33 33 34 3a 20 43 6f 6e r;.........}........./*.334:.Con
5060 74 69 6e 75 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 20 2a 2f 0a tinue.authentication.request.*/.
5080 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 ........if.(PEAR::isError($error
50a0 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 33 33 34 29 29 29 20 .=.$this->_parseResponse(334))).
50c0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 35 30 33 3a 20 45 72 72 6f 72 3a 20 61 6c 72 {............./*.503:.Error:.alr
50e0 65 61 64 79 20 61 75 74 68 65 6e 74 69 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 eady.authenticated.*/...........
5100 20 20 69 66 20 28 24 74 68 69 73 2d 3e 5f 63 6f 64 65 20 3d 3d 3d 20 35 30 33 29 20 7b 0a 20 20 ..if.($this->_code.===.503).{...
5120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 ..............return.true;......
5140 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 .......}.............return.$err
5160 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 24 63 68 61 6c 6c 65 6e 67 or;.........}..........$challeng
5180 65 20 3d 20 62 61 73 65 36 34 5f 64 65 63 6f 64 65 28 24 74 68 69 73 2d 3e 5f 61 72 67 75 6d 65 e.=.base64_decode($this->_argume
51a0 6e 74 73 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 24 64 69 67 65 73 74 20 3d 20 26 41 75 74 68 nts[0]);.........$digest.=.&Auth
51c0 5f 53 41 53 4c 3a 3a 66 61 63 74 6f 72 79 28 27 64 69 67 65 73 74 6d 64 35 27 29 3b 0a 20 20 20 _SASL::factory('digestmd5');....
51e0 20 20 20 20 20 24 61 75 74 68 5f 73 74 72 20 3d 20 62 61 73 65 36 34 5f 65 6e 63 6f 64 65 28 24 .....$auth_str.=.base64_encode($
5200 64 69 67 65 73 74 2d 3e 67 65 74 52 65 73 70 6f 6e 73 65 28 24 75 69 64 2c 20 24 70 77 64 2c 20 digest->getResponse($uid,.$pwd,.
5220 24 63 68 61 6c 6c 65 6e 67 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 $challenge,.....................
5240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
5260 20 20 20 24 74 68 69 73 2d 3e 68 6f 73 74 2c 20 22 73 6d 74 70 22 29 29 3b 0a 0a 20 20 20 20 20 ...$this->host,."smtp"));.......
5280 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 ...if.(PEAR::isError($error.=.$t
52a0 68 69 73 2d 3e 5f 70 75 74 28 24 61 75 74 68 5f 73 74 72 29 29 29 20 7b 0a 20 20 20 20 20 20 20 his->_put($auth_str))).{........
52c0 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 .....return.$error;.........}...
52e0 20 20 20 20 20 20 2f 2a 20 33 33 34 3a 20 43 6f 6e 74 69 6e 75 65 20 61 75 74 68 65 6e 74 69 63 ....../*.334:.Continue.authentic
5300 61 74 69 6f 6e 20 72 65 71 75 65 73 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 ation.request.*/.........if.(PEA
5320 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 R::isError($error.=.$this->_pars
5340 65 52 65 73 70 6f 6e 73 65 28 33 33 34 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 eResponse(334))).{.............r
5360 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 eturn.$error;.........}.........
5380 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 2a 20 57 65 20 64 6f 6e 27 74 20 75 73 65 20 74 68 65 20 ./*..........*.We.don't.use.the.
53a0 70 72 6f 74 6f 63 6f 6c 27 73 20 74 68 69 72 64 20 73 74 65 70 20 62 65 63 61 75 73 65 20 53 4d protocol's.third.step.because.SM
53c0 54 50 20 64 6f 65 73 6e 27 74 20 61 6c 6c 6f 77 0a 20 20 20 20 20 20 20 20 20 2a 20 73 75 62 73 TP.doesn't.allow..........*.subs
53e0 65 71 75 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2c 20 73 6f 20 77 65 20 6a 75 73 equent.authentication,.so.we.jus
5400 74 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 20 69 74 2e 0a 20 20 20 20 20 20 20 20 20 2a t.silently.ignore.it...........*
5420 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 /.........if.(PEAR::isError($err
5440 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 20 27 29 29 29 20 7b 0a 20 20 20 20 20 20 or.=.$this->_put('.'))).{.......
5460 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 ......return.$error;.........}..
5480 20 20 20 20 20 20 20 2f 2a 20 32 33 35 3a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 75 ......./*.235:.Authentication.su
54a0 63 63 65 73 73 66 75 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 ccessful.*/.........if.(PEAR::is
54c0 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 Error($error.=.$this->_parseResp
54e0 6f 6e 73 65 28 32 33 35 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e onse(235))).{.............return
5500 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a .$error;.........}.....}....../*
5520 20 41 75 74 68 65 6e 74 69 63 61 74 65 73 20 74 68 65 20 75 73 65 72 20 75 73 69 6e 67 20 74 68 .Authenticates.the.user.using.th
5540 65 20 43 52 41 4d 2d 4d 44 35 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a e.CRAM-MD5.method.......*......*
5560 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 75 73 65 72 69 64 20 74 6f 20 61 75 74 .@param.string.The.userid.to.aut
5580 68 65 6e 74 69 63 61 74 65 20 61 73 2e 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 henticate.as.......*.@param.stri
55a0 6e 67 20 54 68 65 20 70 61 73 73 77 6f 72 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 ng.The.password.to.authenticate.
55c0 77 69 74 68 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 with.......*......*.@return.mixe
55e0 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 d.Returns.a.PEAR_Error.with.an.e
5600 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 rror.message.on.any......*......
5620 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 .........kind.of.failure,.or.tru
5640 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 72 69 e.on.success.......*.@access.pri
5660 76 61 74 65 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 31 2e 30 0a 20 20 20 20 20 2a vate......*.@since..1.1.0......*
5680 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 61 75 74 68 43 52 41 4d 5f 4d 44 35 28 24 75 69 /.....function._authCRAM_MD5($ui
56a0 64 2c 20 24 70 77 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a d,.$pwd).....{.........if.(PEAR:
56c0 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 41 :isError($error.=.$this->_put('A
56e0 55 54 48 27 2c 20 27 43 52 41 4d 2d 4d 44 35 27 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 UTH',.'CRAM-MD5'))).{...........
5700 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 ..return.$error;.........}......
5720 20 20 20 2f 2a 20 33 33 34 3a 20 43 6f 6e 74 69 6e 75 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 .../*.334:.Continue.authenticati
5740 6f 6e 20 72 65 71 75 65 73 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a on.request.*/.........if.(PEAR::
5760 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 isError($error.=.$this->_parseRe
5780 73 70 6f 6e 73 65 28 33 33 34 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 35 sponse(334))).{............./*.5
57a0 30 33 3a 20 45 72 72 6f 72 3a 20 61 6c 72 65 61 64 79 20 61 75 74 68 65 6e 74 69 63 61 74 65 64 03:.Error:.already.authenticated
57c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 2d 3e 5f 63 6f 64 65 .*/.............if.($this->_code
57e0 20 3d 3d 3d 20 35 30 33 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .===.503).{.................retu
5800 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 rn.true;.............}..........
5820 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 ...return.$error;.........}.....
5840 20 20 20 20 20 24 63 68 61 6c 6c 65 6e 67 65 20 3d 20 62 61 73 65 36 34 5f 64 65 63 6f 64 65 28 .....$challenge.=.base64_decode(
5860 24 74 68 69 73 2d 3e 5f 61 72 67 75 6d 65 6e 74 73 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 24 $this->_arguments[0]);.........$
5880 63 72 61 6d 20 3d 20 26 41 75 74 68 5f 53 41 53 4c 3a 3a 66 61 63 74 6f 72 79 28 27 63 72 61 6d cram.=.&Auth_SASL::factory('cram
58a0 6d 64 35 27 29 3b 0a 20 20 20 20 20 20 20 20 24 61 75 74 68 5f 73 74 72 20 3d 20 62 61 73 65 36 md5');.........$auth_str.=.base6
58c0 34 5f 65 6e 63 6f 64 65 28 24 63 72 61 6d 2d 3e 67 65 74 52 65 73 70 6f 6e 73 65 28 24 75 69 64 4_encode($cram->getResponse($uid
58e0 2c 20 24 70 77 64 2c 20 24 63 68 61 6c 6c 65 6e 67 65 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 ,.$pwd,.$challenge));..........i
5900 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d f.(PEAR::isError($error.=.$this-
5920 3e 5f 70 75 74 28 24 61 75 74 68 5f 73 74 72 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 >_put($auth_str))).{............
5940 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 .return.$error;.........}.......
5960 20 20 20 2f 2a 20 32 33 35 3a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 75 63 63 65 73 .../*.235:.Authentication.succes
5980 73 66 75 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f sful.*/.........if.(PEAR::isErro
59a0 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 r($error.=.$this->_parseResponse
59c0 28 32 33 35 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 (235))).{.............return.$er
59e0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 ror;.........}.....}....../**...
5a00 20 20 20 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 73 20 74 68 65 20 75 73 65 72 20 75 73 69 6e ...*.Authenticates.the.user.usin
5a20 67 20 74 68 65 20 4c 4f 47 49 4e 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 g.the.LOGIN.method.......*......
5a40 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 75 73 65 72 69 64 20 74 6f 20 61 75 *.@param.string.The.userid.to.au
5a60 74 68 65 6e 74 69 63 61 74 65 20 61 73 2e 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 thenticate.as.......*.@param.str
5a80 69 6e 67 20 54 68 65 20 70 61 73 73 77 6f 72 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 ing.The.password.to.authenticate
5aa0 20 77 69 74 68 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 .with.......*......*.@return.mix
5ac0 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 ed.Returns.a.PEAR_Error.with.an.
5ae0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 error.message.on.any......*.....
5b00 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 ..........kind.of.failure,.or.tr
5b20 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 72 ue.on.success.......*.@access.pr
5b40 69 76 61 74 65 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 31 2e 30 0a 20 20 20 20 20 ivate......*.@since..1.1.0......
5b60 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 61 75 74 68 4c 6f 67 69 6e 28 24 75 69 64 2c */.....function._authLogin($uid,
5b80 20 24 70 77 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 .$pwd).....{.........if.(PEAR::i
5ba0 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 41 55 54 sError($error.=.$this->_put('AUT
5bc0 48 27 2c 20 27 4c 4f 47 49 4e 27 29 29 29 20 7b 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 H',.'LOGIN'))).{..............re
5be0 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f turn.$error;.........}........./
5c00 2a 20 33 33 34 3a 20 43 6f 6e 74 69 6e 75 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 72 *.334:.Continue.authentication.r
5c20 65 71 75 65 73 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 equest.*/.........if.(PEAR::isEr
5c40 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e ror($error.=.$this->_parseRespon
5c60 73 65 28 33 33 34 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 35 30 33 3a 20 se(334))).{............./*.503:.
5c80 45 72 72 6f 72 3a 20 61 6c 72 65 61 64 79 20 61 75 74 68 65 6e 74 69 63 61 74 65 64 20 2a 2f 0a Error:.already.authenticated.*/.
5ca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 2d 3e 5f 63 6f 64 65 20 3d 3d 3d ............if.($this->_code.===
5cc0 20 35 30 33 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 .503).{.................return.t
5ce0 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 rue;.............}.............r
5d00 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 eturn.$error;.........}.........
5d20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 .if.(PEAR::isError($error.=.$thi
5d40 73 2d 3e 5f 70 75 74 28 62 61 73 65 36 34 5f 65 6e 63 6f 64 65 28 24 75 69 64 29 29 29 29 20 7b s->_put(base64_encode($uid)))).{
5d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 .............return.$error;.....
5d80 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 33 33 34 3a 20 43 6f 6e 74 69 6e 75 65 20 61 ....}........./*.334:.Continue.a
5da0 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 20 2a 2f 0a 20 20 20 20 20 20 20 uthentication.request.*/........
5dc0 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 .if.(PEAR::isError($error.=.$thi
5de0 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 33 33 34 29 29 29 20 7b 0a 20 20 20 20 20 s->_parseResponse(334))).{......
5e00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a .......return.$error;.........}.
5e20 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f .........if.(PEAR::isError($erro
5e40 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 62 61 73 65 36 34 5f 65 6e 63 6f 64 65 28 24 70 r.=.$this->_put(base64_encode($p
5e60 77 64 29 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 wd)))).{.............return.$err
5e80 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 32 33 35 3a 20 41 or;.........}........../*.235:.A
5ea0 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 75 63 63 65 73 73 66 75 6c 20 2a 2f 0a 20 20 20 20 uthentication.successful.*/.....
5ec0 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 ....if.(PEAR::isError($error.=.$
5ee0 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 33 35 29 29 29 20 7b 0a 20 20 this->_parseResponse(235))).{...
5f00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 ..........return.$error;........
5f20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a .}..........return.true;.....}..
5f40 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 73 20 74 68 65 ..../**......*.Authenticates.the
5f60 20 75 73 65 72 20 75 73 69 6e 67 20 74 68 65 20 50 4c 41 49 4e 20 6d 65 74 68 6f 64 2e 0a 20 20 .user.using.the.PLAIN.method....
5f80 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 75 73 ...*......*.@param.string.The.us
5fa0 65 72 69 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 61 73 2e 0a 20 20 20 20 20 2a 20 erid.to.authenticate.as.......*.
5fc0 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 70 61 73 73 77 6f 72 64 20 74 6f 20 61 75 @param.string.The.password.to.au
5fe0 74 68 65 6e 74 69 63 61 74 65 20 77 69 74 68 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 thenticate.with.......*......*.@
6000 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f return.mixed.Returns.a.PEAR_Erro
6020 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 r.with.an.error.message.on.any..
6040 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c ....*...............kind.of.fail
6060 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 ure,.or.true.on.success.......*.
6080 40 61 63 63 65 73 73 20 70 72 69 76 61 74 65 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 @access.private......*.@since..1
60a0 2e 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 5f 61 75 74 68 50 .1.0......*/.....function._authP
60c0 6c 61 69 6e 28 24 75 69 64 2c 20 24 70 77 64 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 lain($uid,.$pwd).....{.........i
60e0 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d f.(PEAR::isError($error.=.$this-
6100 3e 5f 70 75 74 28 27 41 55 54 48 27 2c 20 27 50 4c 41 49 4e 27 29 29 29 20 7b 0a 20 20 20 20 20 >_put('AUTH',.'PLAIN'))).{......
6120 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a .......return.$error;.........}.
6140 20 20 20 20 20 20 20 20 2f 2a 20 33 33 34 3a 20 43 6f 6e 74 69 6e 75 65 20 61 75 74 68 65 6e 74 ......../*.334:.Continue.authent
6160 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 ication.request.*/.........if.(P
6180 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 EAR::isError($error.=.$this->_pa
61a0 72 73 65 52 65 73 70 6f 6e 73 65 28 33 33 34 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 rseResponse(334))).{............
61c0 20 2f 2a 20 35 30 33 3a 20 45 72 72 6f 72 3a 20 61 6c 72 65 61 64 79 20 61 75 74 68 65 6e 74 69 ./*.503:.Error:.already.authenti
61e0 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 24 74 68 69 73 2d 3e cated.*/.............if.($this->
6200 5f 63 6f 64 65 20 3d 3d 3d 20 35 30 33 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 _code.===.503).{................
6220 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 .return.true;.............}.....
6240 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d ........return.$error;.........}
6260 0a 0a 20 20 20 20 20 20 20 20 24 61 75 74 68 5f 73 74 72 20 3d 20 62 61 73 65 36 34 5f 65 6e 63 ..........$auth_str.=.base64_enc
6280 6f 64 65 28 63 68 72 28 30 29 20 2e 20 24 75 69 64 20 2e 20 63 68 72 28 30 29 20 2e 20 24 70 77 ode(chr(0)...$uid...chr(0)...$pw
62a0 64 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 d);..........if.(PEAR::isError($
62c0 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 24 61 75 74 68 5f 73 74 72 29 29 29 error.=.$this->_put($auth_str)))
62e0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 .{.............return.$error;...
6300 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 32 33 35 3a 20 41 75 74 68 65 6e 74 ......}........../*.235:.Authent
6320 69 63 61 74 69 6f 6e 20 73 75 63 63 65 73 73 66 75 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 ication.successful.*/.........if
6340 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e .(PEAR::isError($error.=.$this->
6360 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 33 35 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 _parseResponse(235))).{.........
6380 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 ....return.$error;.........}....
63a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a ......return.true;.....}....../*
63c0 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 74 68 65 20 48 45 4c 4f 20 63 6f 6d 6d 61 6e 64 2e 0a *......*.Send.the.HELO.command..
63e0 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 .....*......*.@param.string.The.
6400 64 6f 6d 61 69 6e 20 6e 61 6d 65 20 74 6f 20 73 61 79 20 77 65 20 61 72 65 2e 0a 20 20 20 20 20 domain.name.to.say.we.are.......
6420 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 *......*.@return.mixed.Returns.a
6440 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 .PEAR_Error.with.an.error.messag
6460 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 e.on.any......*...............ki
6480 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 nd.of.failure,.or.true.on.succes
64a0 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 s.......*.@access.public......*.
64c0 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e @since..1.0......*/.....function
64e0 20 68 65 6c 6f 28 24 64 6f 6d 61 69 6e 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 .helo($domain).....{.........if.
6500 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f (PEAR::isError($error.=.$this->_
6520 70 75 74 28 27 48 45 4c 4f 27 2c 20 24 64 6f 6d 61 69 6e 29 29 29 20 7b 0a 20 20 20 20 20 20 20 put('HELO',.$domain))).{........
6540 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 .....return.$error;.........}...
6560 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d ......if.(PEAR::isError($error.=
6580 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 30 29 29 29 20 7b 0a .$this->_parseResponse(250))).{.
65a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 ............return.$error;......
65c0 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d ...}..........return.true;.....}
65e0 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 74 68 65 20 4d 41 49 4c 20 46 ....../**......*.Send.the.MAIL.F
6600 52 4f 4d 3a 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 ROM:.command.......*......*.@par
6620 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 73 65 6e 64 65 72 20 28 72 65 76 65 72 73 65 20 70 61 am.string.The.sender.(reverse.pa
6640 74 68 29 20 74 6f 20 73 65 74 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 th).to.set.......*......*.@retur
6660 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 n.mixed.Returns.a.PEAR_Error.wit
6680 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a h.an.error.message.on.any......*
66a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 ...............kind.of.failure,.
66c0 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 or.true.on.success.......*.@acce
66e0 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 ss.public......*.@since..1.0....
6700 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6d 61 69 6c 46 72 6f 6d 28 24 73 65 6e 64 ..*/.....function.mailFrom($send
6720 65 72 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 er).....{.........if.(PEAR::isEr
6740 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 4d 41 49 4c 27 2c ror($error.=.$this->_put('MAIL',
6760 20 22 46 52 4f 4d 3a 3c 24 73 65 6e 64 65 72 3e 22 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 ."FROM:<$sender>"))).{..........
6780 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ...return.$error;.........}.....
67a0 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 ....if.(PEAR::isError($error.=.$
67c0 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 30 29 29 29 20 7b 0a 20 20 this->_parseResponse(250))).{...
67e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 ..........return.$error;........
6800 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a .}..........return.true;.....}..
6820 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 74 68 65 20 52 43 50 54 20 54 4f 3a ..../**......*.Send.the.RCPT.TO:
6840 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 .command.......*......*.@param.s
6860 74 72 69 6e 67 20 54 68 65 20 72 65 63 69 70 69 65 6e 74 20 28 66 6f 72 77 61 72 64 20 70 61 74 tring.The.recipient.(forward.pat
6880 68 29 20 74 6f 20 61 64 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e h).to.add.......*......*.@return
68a0 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 .mixed.Returns.a.PEAR_Error.with
68c0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 .an.error.message.on.any......*.
68e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f ..............kind.of.failure,.o
6900 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 r.true.on.success.......*.@acces
6920 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 s.public......*.@since..1.0.....
6940 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 63 70 74 54 6f 28 24 72 65 63 69 70 69 65 .*/.....function.rcptTo($recipie
6960 6e 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 nt).....{.........if.(PEAR::isEr
6980 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 52 43 50 54 27 2c ror($error.=.$this->_put('RCPT',
69a0 20 22 54 4f 3a 3c 24 72 65 63 69 70 69 65 6e 74 3e 22 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 ."TO:<$recipient>"))).{.........
69c0 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 ....return.$error;.........}....
69e0 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 .....if.(PEAR::isError($error.=.
6a00 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 61 72 72 61 79 28 32 35 30 2c $this->_parseResponse(array(250,
6a20 20 32 35 31 29 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 .251)))).{.............return.$e
6a40 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 rror;.........}..........return.
6a60 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 51 75 6f 74 true;.....}....../**......*.Quot
6a80 65 20 74 68 65 20 64 61 74 61 20 73 6f 20 74 68 61 74 20 69 74 20 6d 65 65 74 73 20 53 4d 54 50 e.the.data.so.that.it.meets.SMTP
6aa0 20 73 74 61 6e 64 61 72 64 73 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 54 68 69 73 20 69 .standards.......*......*.This.i
6ac0 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 73 65 70 61 72 61 74 65 20 70 75 62 6c 69 63 20 s.provided.as.a.separate.public.
6ae0 66 75 6e 63 74 69 6f 6e 20 74 6f 20 66 61 63 69 6c 69 74 61 74 65 20 65 61 73 69 65 72 0a 20 20 function.to.facilitate.easier...
6b00 20 20 20 2a 20 6f 76 65 72 6c 6f 61 64 69 6e 67 20 66 6f 72 20 74 68 65 20 63 61 73 65 73 20 77 ...*.overloading.for.the.cases.w
6b20 68 65 72 65 20 69 74 20 69 73 20 64 65 73 69 72 61 62 6c 65 20 74 6f 20 63 75 73 74 6f 6d 69 7a here.it.is.desirable.to.customiz
6b40 65 20 74 68 65 0a 20 20 20 20 20 2a 20 71 75 6f 74 69 6e 67 20 62 65 68 61 76 69 6f 72 2e 0a 20 e.the......*.quoting.behavior...
6b60 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 6d ....*......*.@param.string.The.m
6b80 65 73 73 61 67 65 20 74 65 78 74 20 74 6f 20 71 75 6f 74 65 2e 20 20 54 68 65 20 73 74 72 69 6e essage.text.to.quote...The.strin
6ba0 67 20 6d 75 73 74 20 62 65 20 70 61 73 73 65 64 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 g.must.be.passed......*.........
6bc0 20 20 20 20 20 20 62 79 20 72 65 66 65 72 65 6e 63 65 2c 20 61 6e 64 20 74 68 65 20 74 65 78 74 ......by.reference,.and.the.text
6be0 20 77 69 6c 6c 20 62 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 70 6c 61 63 65 2e 0a 20 20 20 20 .will.be.modified.in.place......
6c00 20 2a 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 .*......*.@access.public......*.
6c20 40 73 69 6e 63 65 20 20 31 2e 32 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e @since..1.2......*/.....function
6c40 20 71 75 6f 74 65 64 61 74 61 28 26 24 64 61 74 61 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 .quotedata(&$data).....{........
6c60 20 2f 2a 0a 20 20 20 20 20 20 20 20 20 2a 20 43 68 61 6e 67 65 20 55 6e 69 78 20 28 5c 6e 29 20 ./*..........*.Change.Unix.(\n).
6c80 61 6e 64 20 4d 61 63 20 28 5c 72 29 20 6c 69 6e 65 66 65 65 64 73 20 69 6e 74 6f 20 49 6e 74 65 and.Mac.(\r).linefeeds.into.Inte
6ca0 72 6e 65 74 2d 73 74 61 6e 64 61 72 64 20 43 52 4c 46 0a 20 20 20 20 20 20 20 20 20 2a 20 28 5c rnet-standard.CRLF..........*.(\
6cc0 72 5c 6e 29 20 6c 69 6e 65 66 65 65 64 73 2e 0a 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 r\n).linefeeds...........*/.....
6ce0 20 20 20 20 24 64 61 74 61 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65 28 22 2f 28 5b 5e 5c 72 ....$data.=.preg_replace("/([^\r
6d00 5d 7b 31 7d 29 5c 6e 2f 22 2c 20 22 5c 5c 31 5c 72 5c 6e 22 2c 20 24 64 61 74 61 29 3b 0a 20 20 ]{1})\n/",."\\1\r\n",.$data);...
6d20 20 20 20 20 20 20 24 64 61 74 61 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65 28 22 2f 5c 6e 5c ......$data.=.preg_replace("/\n\
6d40 6e 2f 22 2c 20 22 5c 6e 5c 72 5c 6e 22 2c 20 24 64 61 74 61 29 3b 0a 0a 20 20 20 20 20 20 20 20 n/",."\n\r\n",.$data);..........
6d60 2f 2a 0a 20 20 20 20 20 20 20 20 20 2a 20 42 65 63 61 75 73 65 20 61 20 73 69 6e 67 6c 65 20 6c /*..........*.Because.a.single.l
6d80 65 61 64 69 6e 67 20 70 65 72 69 6f 64 20 28 2e 29 20 73 69 67 6e 69 66 69 65 73 20 61 6e 20 65 eading.period.(.).signifies.an.e
6da0 6e 64 20 74 6f 20 74 68 65 20 64 61 74 61 2c 0a 20 20 20 20 20 20 20 20 20 2a 20 6c 65 67 69 74 nd.to.the.data,..........*.legit
6dc0 69 6d 61 74 65 20 6c 65 61 64 69 6e 67 20 70 65 72 69 6f 64 73 20 6e 65 65 64 20 74 6f 20 62 65 imate.leading.periods.need.to.be
6de0 20 22 64 6f 75 62 6c 65 64 22 20 28 65 2e 67 2e 20 27 2e 2e 27 29 2e 0a 20 20 20 20 20 20 20 20 ."doubled".(e.g..'..')..........
6e00 20 2a 2f 0a 20 20 20 20 20 20 20 20 24 64 61 74 61 20 3d 20 70 72 65 67 5f 72 65 70 6c 61 63 65 .*/.........$data.=.preg_replace
6e20 28 22 2f 5c 6e 5c 2e 2f 22 2c 20 22 5c 6e 2e 2e 22 2c 20 24 64 61 74 61 29 3b 0a 20 20 20 20 7d ("/\n\./",."\n..",.$data);.....}
6e40 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 74 68 65 20 44 41 54 41 20 63 ....../**......*.Send.the.DATA.c
6e60 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 ommand.......*......*.@param.str
6e80 69 6e 67 20 54 68 65 20 6d 65 73 73 61 67 65 20 62 6f 64 79 20 74 6f 20 73 65 6e 64 2e 0a 20 20 ing.The.message.body.to.send....
6ea0 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e ...*......*.@return.mixed.Return
6ec0 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 s.a.PEAR_Error.with.an.error.mes
6ee0 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 sage.on.any......*..............
6f00 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 .kind.of.failure,.or.true.on.suc
6f20 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 cess.......*.@access.public.....
6f40 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 .*.@since..1.0......*/.....funct
6f60 69 6f 6e 20 64 61 74 61 28 24 64 61 74 61 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a ion.data($data).....{........./*
6f80 0a 20 20 20 20 20 20 20 20 20 2a 20 52 46 43 20 31 38 37 30 2c 20 73 65 63 74 69 6f 6e 20 33 2c ..........*.RFC.1870,.section.3,
6fa0 20 73 75 62 73 65 63 74 69 6f 6e 20 33 20 73 74 61 74 65 73 20 22 61 20 76 61 6c 75 65 20 6f 66 .subsection.3.states."a.value.of
6fc0 20 7a 65 72 6f 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20 20 20 20 20 20 2a 20 74 68 61 74 20 .zero.indicates..........*.that.
6fe0 6e 6f 20 66 69 78 65 64 20 6d 61 78 69 6d 75 6d 20 6d 65 73 73 61 67 65 20 73 69 7a 65 20 69 73 no.fixed.maximum.message.size.is
7000 20 69 6e 20 66 6f 72 63 65 22 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 74 0a 20 20 20 .in.force"...Furthermore,.it....
7020 20 20 20 20 20 20 2a 20 73 61 79 73 20 74 68 61 74 20 69 66 20 22 74 68 65 20 70 61 72 61 6d 65 ......*.says.that.if."the.parame
7040 74 65 72 20 69 73 20 6f 6d 69 74 74 65 64 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 ter.is.omitted.no.information.is
7060 20 63 6f 6e 76 65 79 65 64 0a 20 20 20 20 20 20 20 20 20 2a 20 61 62 6f 75 74 20 74 68 65 20 73 .conveyed..........*.about.the.s
7080 65 72 76 65 72 27 73 20 66 69 78 65 64 20 6d 61 78 69 6d 75 6d 20 6d 65 73 73 61 67 65 20 73 69 erver's.fixed.maximum.message.si
70a0 7a 65 22 2e 0a 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 73 ze"...........*/.........if.(iss
70c0 65 74 28 24 74 68 69 73 2d 3e 5f 65 73 6d 74 70 5b 27 53 49 5a 45 27 5d 29 20 26 26 20 28 24 74 et($this->_esmtp['SIZE']).&&.($t
70e0 68 69 73 2d 3e 5f 65 73 6d 74 70 5b 27 53 49 5a 45 27 5d 20 3e 20 30 29 29 20 7b 0a 20 20 20 20 his->_esmtp['SIZE'].>.0)).{.....
7100 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 6c 65 6e 28 24 64 61 74 61 29 20 3e 3d 20 24 74 68 ........if.(strlen($data).>=.$th
7120 69 73 2d 3e 5f 65 73 6d 74 70 5b 27 53 49 5a 45 27 5d 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 is->_esmtp['SIZE']).{...........
7140 20 20 20 20 20 20 24 74 68 69 73 2d 3e 64 69 73 63 6f 6e 6e 65 63 74 28 29 3b 0a 20 20 20 20 20 ......$this->disconnect();......
7160 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 45 41 52 5f 45 72 72 6f 72 ...........return.new.PEAR_Error
7180 28 27 4d 65 73 73 61 67 65 20 73 69 7a 65 20 65 78 63 65 64 65 73 20 74 68 65 20 73 65 72 76 65 ('Message.size.excedes.the.serve
71a0 72 20 6c 69 6d 69 74 27 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 r.limit');.............}........
71c0 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 51 75 6f 74 65 20 74 68 65 20 64 61 74 61 20 62 61 .}........../*.Quote.the.data.ba
71e0 73 65 64 20 6f 6e 20 74 68 65 20 53 4d 54 50 20 73 74 61 6e 64 61 72 64 73 2e 20 2a 2f 0a 20 20 sed.on.the.SMTP.standards..*/...
7200 20 20 20 20 20 20 24 74 68 69 73 2d 3e 71 75 6f 74 65 64 61 74 61 28 24 64 61 74 61 29 3b 0a 0a ......$this->quotedata($data);..
7220 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 ........if.(PEAR::isError($error
7240 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 44 41 54 41 27 29 29 29 20 7b 0a 20 20 20 20 20 .=.$this->_put('DATA'))).{......
7260 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a .......return.$error;.........}.
7280 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 ........if.(PEAR::isError($error
72a0 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 33 35 34 29 29 29 20 .=.$this->_parseResponse(354))).
72c0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 {.............return.$error;....
72e0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f .....}..........if.(PEAR::isErro
7300 72 28 24 74 68 69 73 2d 3e 5f 73 65 6e 64 28 24 64 61 74 61 20 2e 20 22 5c 72 5c 6e 2e 5c 72 5c r($this->_send($data..."\r\n.\r\
7320 6e 22 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 50 n"))).{.............return.new.P
7340 45 41 52 5f 45 72 72 6f 72 28 27 77 72 69 74 65 20 74 6f 20 73 6f 63 6b 65 74 20 66 61 69 6c 65 EAR_Error('write.to.socket.faile
7360 64 27 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a d');.........}.........if.(PEAR:
7380 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 :isError($error.=.$this->_parseR
73a0 65 73 70 6f 6e 73 65 28 32 35 30 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 esponse(250))).{.............ret
73c0 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 urn.$error;.........}..........r
73e0 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 eturn.true;.....}....../**......
7400 2a 20 53 65 6e 64 20 74 68 65 20 53 45 4e 44 20 46 52 4f 4d 3a 20 63 6f 6d 6d 61 6e 64 2e 0a 20 *.Send.the.SEND.FROM:.command...
7420 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 72 ....*......*.@param.string.The.r
7440 65 76 65 72 73 65 20 70 61 74 68 20 74 6f 20 73 65 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 everse.path.to.send.......*.....
7460 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f .*.@return.mixed.Returns.a.PEAR_
7480 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 Error.with.an.error.message.on.a
74a0 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 ny......*...............kind.of.
74c0 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 failure,.or.true.on.success.....
74e0 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 ..*.@access.public......*.@since
7500 20 20 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 65 6e 64 5f ..1.0......*/.....function.send_
7520 66 72 6f 6d 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 from($path).....{.........if.(PE
7540 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 AR::isError($error.=.$this->_put
7560 28 27 53 45 4e 44 27 2c 20 22 46 52 4f 4d 3a 3c 24 70 61 74 68 3e 22 29 29 29 20 7b 0a 20 20 20 ('SEND',."FROM:<$path>"))).{....
7580 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 .........return.$error;.........
75a0 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 }.........if.(PEAR::isError($err
75c0 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 30 29 29 or.=.$this->_parseResponse(250))
75e0 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 ).{.............return.$error;..
7600 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 .......}..........return.true;..
7620 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 74 68 65 20 53 4f ...}....../**......*.Send.the.SO
7640 4d 4c 20 46 52 4f 4d 3a 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 ML.FROM:.command.......*......*.
7660 40 70 61 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 72 65 76 65 72 73 65 20 70 61 74 68 20 74 @param.string.The.reverse.path.t
7680 6f 20 73 65 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 o.send.......*......*.@return.mi
76a0 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e xed.Returns.a.PEAR_Error.with.an
76c0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 .error.message.on.any......*....
76e0 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 ...........kind.of.failure,.or.t
7700 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 rue.on.success.......*.@access.p
7720 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 20 2a 2f ublic......*.@since..1.0......*/
7740 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 73 6f 6d 6c 5f 66 72 6f 6d 28 24 70 61 74 68 29 0a 20 .....function.soml_from($path)..
7760 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 ...{.........if.(PEAR::isError($
7780 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 53 4f 4d 4c 27 2c 20 22 46 52 4f error.=.$this->_put('SOML',."FRO
77a0 4d 3a 3c 24 70 61 74 68 3e 22 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 M:<$path>"))).{.............retu
77c0 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 rn.$error;.........}.........if.
77e0 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f (PEAR::isError($error.=.$this->_
7800 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 30 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 parseResponse(250))).{..........
7820 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 ...return.$error;.........}.....
7840 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a .....return.true;.....}....../**
7860 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 74 68 65 20 53 41 4d 4c 20 46 52 4f 4d 3a 20 63 6f 6d 6d ......*.Send.the.SAML.FROM:.comm
7880 61 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74 72 69 6e 67 and.......*......*.@param.string
78a0 20 54 68 65 20 72 65 76 65 72 73 65 20 70 61 74 68 20 74 6f 20 73 65 6e 64 2e 0a 20 20 20 20 20 .The.reverse.path.to.send.......
78c0 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 *......*.@return.mixed.Returns.a
78e0 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 .PEAR_Error.with.an.error.messag
7900 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 e.on.any......*...............ki
7920 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 nd.of.failure,.or.true.on.succes
7940 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 s.......*.@access.public......*.
7960 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e @since..1.0......*/.....function
7980 20 73 61 6d 6c 5f 66 72 6f 6d 28 24 70 61 74 68 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 .saml_from($path).....{.........
79a0 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 if.(PEAR::isError($error.=.$this
79c0 2d 3e 5f 70 75 74 28 27 53 41 4d 4c 27 2c 20 22 46 52 4f 4d 3a 3c 24 70 61 74 68 3e 22 29 29 29 ->_put('SAML',."FROM:<$path>")))
79e0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 .{.............return.$error;...
7a00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f ......}.........if.(PEAR::isErro
7a20 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 r($error.=.$this->_parseResponse
7a40 28 32 35 30 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 (250))).{.............return.$er
7a60 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 ror;.........}..........return.t
7a80 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 rue;.....}....../**......*.Send.
7aa0 74 68 65 20 52 53 45 54 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 the.RSET.command.......*......*.
7ac0 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 @return.mixed.Returns.a.PEAR_Err
7ae0 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a or.with.an.error.message.on.any.
7b00 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 .....*...............kind.of.fai
7b20 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a lure,.or.true.on.success.......*
7b40 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 .@access.public......*.@since..1
7b60 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 72 73 65 74 28 29 0a 20 .0......*/.....function.rset()..
7b80 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 ...{.........if.(PEAR::isError($
7ba0 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 52 53 45 54 27 29 29 29 20 7b 0a error.=.$this->_put('RSET'))).{.
7bc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 ............return.$error;......
7be0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 ...}.........if.(PEAR::isError($
7c00 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 error.=.$this->_parseResponse(25
7c20 30 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 0))).{.............return.$error
7c40 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 ;.........}..........return.true
7c60 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 74 68 65 ;.....}....../**......*.Send.the
7c80 20 56 52 46 59 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 70 61 .VRFY.command.......*......*.@pa
7ca0 72 61 6d 20 73 74 72 69 6e 67 20 54 68 65 20 73 74 72 69 6e 67 20 74 6f 20 76 65 72 69 66 79 0a ram.string.The.string.to.verify.
7cc0 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 65 74 75 .....*......*.@return.mixed.Retu
7ce0 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d rns.a.PEAR_Error.with.an.error.m
7d00 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 essage.on.any......*............
7d20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f 6e 20 73 ...kind.of.failure,.or.true.on.s
7d40 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 0a 20 20 uccess.......*.@access.public...
7d60 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e ...*.@since..1.0......*/.....fun
7d80 63 74 69 6f 6e 20 76 72 66 79 28 24 73 74 72 69 6e 67 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 ction.vrfy($string).....{.......
7da0 20 20 2f 2a 20 4e 6f 74 65 3a 20 32 35 31 20 69 73 20 61 6c 73 6f 20 61 20 76 61 6c 69 64 20 72 ../*.Note:.251.is.also.a.valid.r
7dc0 65 73 70 6f 6e 73 65 20 63 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 50 45 41 52 esponse.code.*/.........if.(PEAR
7de0 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e 5f 70 75 74 28 27 ::isError($error.=.$this->_put('
7e00 56 52 46 59 27 2c 20 24 73 74 72 69 6e 67 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 VRFY',.$string))).{.............
7e20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 return.$error;.........}........
7e40 20 69 66 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 .if.(PEAR::isError($error.=.$thi
7e60 73 2d 3e 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 30 29 29 29 20 7b 0a 20 20 20 20 20 s->_parseResponse(250))).{......
7e80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a .......return.$error;.........}.
7ea0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 .........return.true;.....}.....
7ec0 20 2f 2a 2a 0a 20 20 20 20 20 2a 20 53 65 6e 64 20 74 68 65 20 4e 4f 4f 50 20 63 6f 6d 6d 61 6e ./**......*.Send.the.NOOP.comman
7ee0 64 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 72 6e 20 6d 69 78 65 64 20 52 d.......*......*.@return.mixed.R
7f00 65 74 75 72 6e 73 20 61 20 50 45 41 52 5f 45 72 72 6f 72 20 77 69 74 68 20 61 6e 20 65 72 72 6f eturns.a.PEAR_Error.with.an.erro
7f20 72 20 6d 65 73 73 61 67 65 20 6f 6e 20 61 6e 79 0a 20 20 20 20 20 2a 20 20 20 20 20 20 20 20 20 r.message.on.any......*.........
7f40 20 20 20 20 20 20 6b 69 6e 64 20 6f 66 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 72 75 65 20 6f ......kind.of.failure,.or.true.o
7f60 6e 20 73 75 63 63 65 73 73 2e 0a 20 20 20 20 20 2a 20 40 61 63 63 65 73 73 20 70 75 62 6c 69 63 n.success.......*.@access.public
7f80 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 31 2e 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 ......*.@since..1.0......*/.....
7fa0 66 75 6e 63 74 69 6f 6e 20 6e 6f 6f 70 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 function.noop().....{.........if
7fc0 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e .(PEAR::isError($error.=.$this->
7fe0 5f 70 75 74 28 27 4e 4f 4f 50 27 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 _put('NOOP'))).{.............ret
8000 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 urn.$error;.........}.........if
8020 20 28 50 45 41 52 3a 3a 69 73 45 72 72 6f 72 28 24 65 72 72 6f 72 20 3d 20 24 74 68 69 73 2d 3e .(PEAR::isError($error.=.$this->
8040 5f 70 61 72 73 65 52 65 73 70 6f 6e 73 65 28 32 35 30 29 29 29 20 7b 0a 20 20 20 20 20 20 20 20 _parseResponse(250))).{.........
8060 20 20 20 20 72 65 74 75 72 6e 20 24 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 ....return.$error;.........}....
8080 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a ......return.true;.....}....../*
80a0 2a 0a 20 20 20 20 20 2a 20 42 61 63 6b 77 61 72 64 73 2d 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 *......*.Backwards-compatibility
80c0 20 6d 65 74 68 6f 64 2e 20 20 69 64 65 6e 74 69 66 79 53 65 6e 64 65 72 28 29 27 73 20 66 75 6e .method...identifySender()'s.fun
80e0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 20 20 20 20 20 2a 20 6e 6f 77 20 68 61 6e 64 6c 65 64 ctionality.is......*.now.handled
8100 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 72 65 74 75 .internally.......*......*.@retu
8120 72 6e 20 20 62 6f 6f 6c 65 61 6e 20 20 20 20 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 6c 77 61 rn..boolean.....This.method.alwa
8140 79 73 20 72 65 74 75 72 6e 20 74 72 75 65 2e 0a 20 20 20 20 20 2a 0a 20 20 20 20 20 2a 20 40 61 ys.return.true.......*......*.@a
8160 63 63 65 73 73 20 20 70 75 62 6c 69 63 0a 20 20 20 20 20 2a 20 40 73 69 6e 63 65 20 20 20 31 2e ccess..public......*.@since...1.
8180 30 0a 20 20 20 20 20 2a 2f 0a 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 69 64 65 6e 74 69 66 79 53 0......*/.....function.identifyS
81a0 65 6e 64 65 72 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 ender().....{.........return.tru
81c0 65 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 3f 3e 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e;.....}.}..?>..................
81e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
82a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
82c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
82e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
83a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
83c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
83e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................