$smtp_max_line) $str=substr($str, 0, $smtp_max_line); $str=str_replace("\n", " ", $str); $str=str_replace("\r", " ", $str); $str=str_replace("\t", " ", $str); $str=str_replace("\"", "'", $str); $str=str_replace("<", "(", $str); $str=str_replace(">", ")", $str); $str=str_replace(" ", " ", $str); $str=trim($str); return($str); } function smail_plain($smtp_to_addr, $smtp_to_name, $smtp_from_addr, $smtp_from_name, $smtp_reply_addr, $smtp_subject, $m_body) { global $smtp_host; global $smtp_port; global $smtp_timeout; global $smtp_max_line; global $smtp_helo; global $smtp_errno; $smtp_errno=0; $r=false; if (!is_email($smtp_to_addr)) { syslog(LOG_ERR, "{$smtp_helo}: smail(): bad recipient address: {$smtp_to_addr}"); $smtp_errno=1; return($r); } if (!is_email($smtp_from_addr)) { syslog(LOG_ERR, "{$smtp_helo}: smail(): bad sender address: {$smtp_from_addr}"); $smtp_errno=2; return($r); } if (!is_email($smtp_reply_addr)) $smtp_reply_addr=$smtp_from_addr; if (!strlen($smtp_to_name=smail_clean_header($smtp_to_name))) $smtp_to_name=$smtp_to_addr; if (!strlen($smtp_from_name=smail_clean_header($smtp_from_name))) $smtp_from_name=$smtp_from_addr; $smtp_subject=smail_clean_header($smtp_subject); if (!($fp=@fsockopen($smtp_host, $smtp_port, $errno, $errstr, $smtp_timeout))) { syslog(LOG_ERR, "{$smtp_helo}: smail() error in fsockopen(): {$errstr} ({$errno})"); $smtp_errno=10; return($r); } while (1) { if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "220 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error during greeting: {$s}"); $smtp_errno=3; break; } fputs($fp, "helo {$smtp_helo}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"helo {$smtp_helo}\": {$s}"); $smtp_errno=4; break; } fputs($fp, "mail from: {$smtp_from_addr}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"mail from: {$smtp_from_addr}\": {$s}"); $smtp_errno=5; break; } fputs($fp, "rcpt to: {$smtp_to_addr}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"rcpt to: {$smtp_to_addr}\": {$s}"); $smtp_errno=6; break; } fputs($fp, "data\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "354 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error in \"data\": {$s}"); $smtp_errno=7; break; } fputs($fp, "To: \"{$smtp_to_name}\" <{$smtp_to_addr}>\r\n"); fputs($fp, "From: \"{$smtp_from_name}\" <{$smtp_reply_addr}>\r\n"); if (!empty($_SERVER[HTTP_HOST]) && !empty($_SERVER[REQUEST_URI])) fputs($fp, "X-url-submited-from: http://{$_SERVER[HTTP_HOST]}{$_SERVER[REQUEST_URI]}\r\n"); if (!empty($smtp_subject)) fputs($fp, "Subject: {$smtp_subject}\r\n"); fputs($fp, "\r\n"); $m_body=str_replace("\n.", "\n>.", $m_body); $m_body=str_replace("\r.", "\r>.", $m_body); fputs($fp, $m_body); fputs($fp, "\r\n.\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \".\": {$s}"); $smtp_errno=8; break; } $r=true; break; } fputs($fp, "quit\r\n"); fclose($fp); return($r); } function smail($smtp_to_addr, $smtp_to_name, $smtp_from_addr, $smtp_from_name, $smtp_reply_addr, $smtp_subject, $m_body) { return(smail_plain($smtp_to_addr, $smtp_to_name, $smtp_from_addr, $smtp_from_name, $smtp_reply_addr, $smtp_subject, $m_body)); } function smail_html($smtp_to_addr, $smtp_to_name, $smtp_from_addr, $smtp_from_name, $smtp_reply_addr, $smtp_subject, $m_body_plain, $m_body_html) { global $smtp_host; global $smtp_port; global $smtp_timeout; global $smtp_max_line; global $smtp_helo; global $smtp_errno; $smtp_errno=0; $r=false; if (!is_email($smtp_to_addr)) { syslog(LOG_ERR, "{$smtp_helo}: smail(): bad recipient address: {$smtp_to_addr}"); $smtp_errno=1; return($r); } if (!is_email($smtp_from_addr)) { syslog(LOG_ERR, "{$smtp_helo}: smail(): bad sender address: {$smtp_from_addr}"); $smtp_errno=2; return($r); } if (!is_email($smtp_reply_addr)) $smtp_reply_addr=$smtp_from_addr; if (!strlen($smtp_to_name=smail_clean_header($smtp_to_name))) $smtp_to_name=$smtp_to_addr; if (!strlen($smtp_from_name=smail_clean_header($smtp_from_name))) $smtp_from_name=$smtp_from_addr; $smtp_subject=smail_clean_header($smtp_subject); if (!($fp=@fsockopen($smtp_host, $smtp_port, $errno, $errstr, $smtp_timeout))) { syslog(LOG_ERR, "{$smtp_helo}: smail() error in fsockopen(): {$errstr} ({$errno})"); $smtp_errno=10; return($r); } while (1) { if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "220 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error during greeting: {$s}"); $smtp_errno=3; break; } fputs($fp, "helo {$smtp_helo}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"helo {$smtp_helo}\": {$s}"); $smtp_errno=4; break; } fputs($fp, "mail from: {$smtp_from_addr}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"mail from: {$smtp_from_addr}\": {$s}"); $smtp_errno=5; break; } fputs($fp, "rcpt to: {$smtp_to_addr}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"rcpt to: {$smtp_to_addr}\": {$s}"); $smtp_errno=6; break; } fputs($fp, "data\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "354 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error in \"data\": {$s}"); $smtp_errno=7; break; } fputs($fp, "To: \"{$smtp_to_name}\" <{$smtp_to_addr}>\r\n"); fputs($fp, "From: \"{$smtp_from_name}\" <{$smtp_reply_addr}>\r\n"); if (!empty($_SERVER[HTTP_HOST]) && !empty($_SERVER[REQUEST_URI])) fputs($fp, "X-url-submited-from: http://{$_SERVER[HTTP_HOST]}{$_SERVER[REQUEST_URI]}\r\n"); if (!empty($smtp_subject)) fputs($fp, "Subject: {$smtp_subject}\r\n"); $boundary="--==".substr(md5($smtp_to_name), 0, 5)."A".time()."O".substr(md5($smtp_to_addr), 0, 5); fputs($fp, "MIME-Version: 1.0\r\n"); fputs($fp, "Content-Type: multipart/alternative;\r\n"); fputs($fp, "\tboundary=\"{$boundary}\"\r\n"); fputs($fp, "\r\n"); fputs($fp, "This is a multi-part message in MIME format."); fputs($fp, "\r\n\r\n--{$boundary}\r\n"); fputs($fp, "Content-Type: text/plain\r\n\r\n"); $m_body_plain=str_replace("\n.", "\n>.", $m_body_plain); $m_body_plain=str_replace("\r.", "\r>.", $m_body_plain); fputs($fp, $m_body_plain); fputs($fp, "\r\n\r\n--{$boundary}\r\n"); fputs($fp, "Content-Type: text/html\r\n\r\n"); $m_body_html=str_replace("\n.", "\n>.", $m_body_html); $m_body_html=str_replace("\r.", "\r>.", $m_body_html); fputs($fp, $m_body_html); fputs($fp, "\r\n\r\n--{$boundary}--\r\n"); fputs($fp, "\r\n.\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \".\": {$s}"); $smtp_errno=8; break; } $r=true; break; } fputs($fp, "quit\r\n"); fclose($fp); return($r); } function smail_csv ($smtp_to_addr, $smtp_to_name, $smtp_from_addr, $smtp_from_name, $smtp_reply_to, $smtp_subject, $m_body_plain, $body_csv, $file_name) { global $smtp_host; global $smtp_port; global $smtp_timeout; global $smtp_max_line; global $smtp_helo; global $smtp_errno; $smtp_errno=0; $r=false; if (!is_email($smtp_to_addr)) { syslog(LOG_ERR, "{$smtp_helo}: smail(): bad recipient address: {$smtp_to_addr}"); $smtp_errno=1; return($r); } if (!is_email($smtp_from_addr)) { syslog(LOG_ERR, "{$smtp_helo}: smail(): bad sender address: {$smtp_from_addr}"); $smtp_errno=2; return($r); } if (!is_email($smtp_reply_addr)) $smtp_reply_addr=$smtp_from_addr; if (!strlen($smtp_to_name=smail_clean_header($smtp_to_name))) $smtp_to_name=$smtp_to_addr; if (!strlen($smtp_from_name=smail_clean_header($smtp_from_name))) $smtp_from_name=$smtp_from_addr; $smtp_subject=smail_clean_header($smtp_subject); $file_name=smail_clean_header($file_name); if (!($fp=@fsockopen($smtp_host, $smtp_port, $errno, $errstr, $smtp_timeout))) { syslog(LOG_ERR, "{$smtp_helo}: smail() error in fsockopen(): {$errstr} ({$errno})"); $smtp_errno=10; return($r); } while (1) { if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "220 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error during greeting: {$s}"); $smtp_errno=3; break; } fputs($fp, "helo {$smtp_helo}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"helo {$smtp_helo}\": {$s}"); $smtp_errno=4; break; } fputs($fp, "mail from: {$smtp_from_addr}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"mail from: {$smtp_from_addr}\": {$s}"); $smtp_errno=5; break; } fputs($fp, "rcpt to: {$smtp_to_addr}\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \"rcpt to: {$smtp_to_addr}\": {$s}"); $smtp_errno=6; break; } fputs($fp, "data\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "354 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error in \"data\": {$s}"); $smtp_errno=7; break; } fputs($fp, "To: \"{$smtp_to_name}\" <{$smtp_to_addr}>\r\n"); fputs($fp, "From: \"{$smtp_from_name}\" <{$smtp_reply_addr}>\r\n"); if (!empty($_SERVER[HTTP_HOST]) && !empty($_SERVER[REQUEST_URI])) fputs($fp, "X-url-submited-from: http://{$_SERVER[HTTP_HOST]}{$_SERVER[REQUEST_URI]}\r\n"); if (!empty($smtp_subject)) fputs($fp, "Subject: {$smtp_subject}\r\n"); $boundary="--==".substr(md5($smtp_to_name), 0, 5)."A".time()."O".substr(md5($smtp_to_addr), 0, 5); fputs($fp, "MIME-Version: 1.0\r\n"); fputs($fp, "Content-Type: multipart/mixed;\r\n"); fputs($fp, "\tboundary=\"{$boundary}\"\r\n"); fputs($fp, "\r\n"); fputs($fp, "This is a multi-part message in MIME format."); fputs($fp, "\r\n\r\n--{$boundary}\r\n"); fputs($fp, "Content-Transfer-Encoding: 7bit\r\n"); fputs($fp, "Content-Type: text/plain\r\n\r\n"); $m_body_plain=str_replace("\n.", "\n>.", $m_body_plain); $m_body_plain=str_replace("\r.", "\r>.", $m_body_plain); fputs($fp, $m_body_plain); fputs($fp, "\r\n\r\n--{$boundary}\r\n"); fputs($fp, "Content-Type: application/octet-stream;\r\n"); fputs($fp, "\tname=\"{$file_name}\"\r\n"); fputs($fp, "Content-Transfer-Encoding: 7bit\r\n"); fputs($fp, "Content-Disposition: attachment;\r\n"); fputs($fp, "\tfilename=\"{$file_name}\"\r\n\r\n"); $body_csv=str_replace("\n.", "\n>.", $body_csv); $body_csv=str_replace("\r.", "\r>.", $body_csv); fputs($fp, $body_csv); fputs($fp, "\r\n\r\n--{$boundary}--\r\n"); fputs($fp, "\r\n.\r\n"); if (($s=@fgets($fp, $smtp_max_line))===FALSE) { syslog(LOG_ERR,"{$smtp_helo}: smail(): fgets() error");$smtp_errno=11;break; } if (strncmp($s, "250 ", 4)) { syslog(LOG_ERR, "{$smtp_helo}: smail() error after \".\": {$s}"); $smtp_errno=8; break; } $r=true; break; } fputs($fp, "quit\r\n"); fclose($fp); return($r); } ?>