<?php


/**
 * @see enviaEmailBase();
 */
function enviaEmailUnifal($recipients, $subject, $body, $from='sistemas@appmail.unifal-mg.edu.br', $fromname=null, $cc=null, $bcc=null, $anexos=null, $replyto=null, $username='sistemas', $password='515t3m45@3m41l', $charset='utf-8') {//$charset='us-ascii'
    $enviado = enviaEmailBase('unifal', $recipients, $subject, $body, $from, $fromname, $cc, $bcc, $anexos, $replyto, $username, $password, $charset);
    if($enviado !== true) {//tem que ser assim (!== true), pois em caso de falha o $enviado tem uma string com o erro
//	echo "nao enviou email";
//	$enviado = enviaEmailGmailContas($recipients, $subject, $body, $from='sistemas@appunifal-mg.edu.br', $fromname=null, $cc=null, $bcc=null, $anexos=null, $replyto=null, $username='cpd.unifal@gmail.com', $password='515t3m45', $charset='utf-8');
	$enviado = enviaEmailGmail($recipients, $subject, $body, $from='sistemas@unifal-mg.edu.br', $fromname=null, $cc=null, $bcc=null, $anexos=null, $replyto=null, $username='sistemas@unifal-mg.edu.br', $password='515t3m45@un1f4l', $charset='utf-8');
    }
    else{
//	echo "enviou email.";
    }
    return $enviado;
}

/**
 *
 * @see enviaEmailBase();
 */
function enviaEmailGmail($recipients, $subject, $body, $from='sistemas@unifal-mg.edu.br', $fromname=null, $cc=null, $bcc=null, $anexos=null, $replyto=null, $username='sistemas@unifal-mg.edu.br', $password='515t3m45@un1f4l', $charset='utf-8') {
    $enviado = enviaEmailBase('gmail', $recipients, $subject, $body, $from, $fromname, $cc, $bcc, $anexos, $replyto, $username, $password, $charset);
    return $enviado;
}

/**
 * @see enviaEmailGmail();
 */
function enviaEmailGmailContas($recipients, $subject, $body, $from='sistemas@unifal-mg.edu.br', $fromname=null, $cc=null, $bcc=null, $anexos=null, $replyto=null, $username='sistemas@unifal-mg.edu.br', $password='515t3m45@un1f4l', $charset='utf-8') {
/*
    //escolhendo a conta a enviar devido ao limit de 500 mensagens (enviadas e recebidas) por dia.
    //a quantidade diaria eh informada no arquivo quantidadeenviocontasgmail.txt
    $nomearquivo = $_SERVER['DOCUMENT_ROOT'] . "/app/base/quantidadeenviocontasgmail.txt";
    $arquivo = file($nomearquivo);
    if(!empty($arquivo)){
        $quantidadedata = explode(' ', $arquivo[0]);
        $quantidade = $quantidadedata[0];
        $data = $quantidadedata[1];
        if($data == date('Y-m-d')) $quantidade = $quantidade + 1;
        else $quantidade = 1;
    }else{
        $quantidade = 1;
    }
    $quantidadehoje = $quantidade.' '.date('Y-m-d');
//    echo $quantidadehoje."<br>";
    $fp = fopen($nomearquivo, 'w+');
    fwrite($fp, $quantidadehoje);
    fclose($fp);
    
    if($quantidade > 1300 AND $quantidade <= 1450){//1300 a 1450
        $username = 'cpd.unifal.9@gmail.com';
    }elseif($quantidade > 1150 AND $quantidade <= 1300){//1150 a 1300
        $username = 'cpd.unifal.8@gmail.com';
    }elseif($quantidade > 900 AND $quantidade <= 1150){//900 a 1150
        $username = 'cpd.unifal.7@gmail.com';
    }elseif($quantidade > 750 AND $quantidade <= 900){//750 a 900
        $username = 'cpd.unifal.6@gmail.com';
    }elseif($quantidade > 600 AND $quantidade <= 750){//600 a 750
        $username = 'cpd.unifal.5@gmail.com';
    }elseif($quantidade > 450 AND $quantidade <= 600){//450 a 600
        $username = 'cpd.unifal.4@gmail.com';
    }elseif($quantidade > 300 AND $quantidade <= 450){//300 a 450
        $username = 'cpd.unifal.3@gmail.com';
    }elseif($quantidade > 150 AND $quantidade <= 300){//150 a 300
        $username = 'cpd.unifal.2@gmail.com';
    }else{//ate 150 e acima dos ifelse acima
        $username = 'cpd.unifal.10@gmail.com';
    }
*/    
    $enviado = enviaEmailGmail($recipients, $subject, $body, $from, $fromname, $cc, $bcc, $anexos, $replyto, $username, $password, $charset);
    return $enviado;
}

/**
 *
 *
 * @param string  $recipients       lista de usuarios que recebera o o e-mail separados por virgula
 * @param string  $subject          assunto do e-mail
 * @param string  $body             texto da mensagem
 * @param string  $from             email do remetente
 * @param string  $fromname         Nome do remetente - padrao NULL
 * @param string  $cc               Carbon Copy (CC) emails separado por virgulas - padrao NULL
 * @param string  $bcc              Blind Carbon Copy (CCO) separado por virgulas - padrao NULL
 * @param array   $anexos           Um array no padrao $_FILES com os arquivos anexos - Ex.: Array ( [anexo] => Array ( [name] => baixas mes de maio.pdf [type] => application/pdf [tmp_name] => /tmp/phppO5D3E [error] => 0 [size] => 125386 ) ) . - padrao NULL
 * @param string  $replyto          Endereco de resposta - padrao NULL
 * @param string  $username         smtp server username - padrao NULL
 * @param string  $password         smtp server password - padrao NULL
 * @param string  $charset          charset do texto da mensagem - padrao 'us-ascii'
 * 
 * @return mix			TRUE or error message if fails
 */
function enviaEmailBase($server, $recipients, $subject, $body, $from='sistemas@appmail.unifal-mg.edu.br', $fromname=null, $cc=null, $bcc=null, $anexos=null, $replyto=null, $username=null, $password=null, $charset='utf-8') {
    require_once $_SERVER['DOCUMENT_ROOT']."/olimpiadageografia/lib/phpmailer/class.phpmailer.php";

    $mail = new PHPMailer();

    $mail->Username = $username; // SMTP account username
    $mail->Password = $password; // SMTP account password
    
    if($server == 'gmail'){
        $mail->IsSMTP(); // Define que a mensagem sera SMTP
        $mail->Mailer = "smtp";
        $mail->Host = "ssl://smtp.gmail.com";
        $mail->Port = 465;
        $mail->SMTPAuth = true; // turn on SMTP authentication
        $mail->IsHTML(true); // Define que o e-mail sera enviado como HTML
    }else{
        $mail->IsSMTP(); // telling the class to use SMTP
//        $mail->Host = '10.254.254.89'; // SMTP server
        $mail->Host = 'appmail.unifal-mg.edu.br'; // SMTP server
        $mail->Port = 587; // set the SMTP port for the GMAIL server
        $mail->Helo = 'app.unifal-mg.edu.br'; // enable SMTP authentication
        $mail->SMTPAuth = true; // enable SMTP authentication
	$mail->SMTPSecure = 'tls';
        $mail->SMTPDebug = 0; // enables SMTP debug information (for testing) - 1 = errors and messages, 2 = messages only
    }

    //garantindo que o from seja 'sistemas@appmail.unifal-mg.edu.br', caso contrario pode dar problema no envio de email
    if(empty($from)) $from = 'sistemas@appmail.unifal-mg.edu.br';
    if($from != 'sistemas@appmail.unifal-mg.edu.br'){
        $replyto = (empty($replyto))? $from : $replyto;
        $from = 'sistemas@appmail.unifal-mg.edu.br';
    }
    
    $mail->From = $from;
    
    $mail->FromName = (empty($fromname))? $from : $fromname;
    
    $replyto = (empty($replyto))? $from : $replyto;
    $mail->AddReplyTo($replyto);
    
    if (!empty($charset)) {
        $mail->CharSet = $charset;
    }

    $mail->Subject = getEncodedSubject($subject);//necessario passar por essa funcao no php7, caso contrario fica vazio se o subject contem caracter especial
    
    $recipientspermitidosdevel = array('marcelo.penha@unifal-mg.edu.br', 'gustavo.afonso@unifal-mg.edu.br', 'cleber.tavares@unifal-mg.edu.br', 'diogo.pereira@unifal-mg.edu.br', 'eliara.tavares@unifal-mg.edu.br', 'jose.ribeiro@unifal-mg.edu.br', 'michel.alves@unifal-mg.edu.br', 'rodrigo.dantas@unifal-mg.edu.br');

    $address = explode(',', $recipients);
    foreach($address as $a) {
        if(stripos($_SERVER[HTTP_HOST], 'app.unifal-mg.edu.br') !== false OR in_array($a, $recipientspermitidosdevel)) $mail->AddAddress($a);
    }
    
    if (!empty($cc)) {
        $addresscc = explode(',', $cc);
        foreach($addresscc as $acc) {
            if(stripos($_SERVER[HTTP_HOST], 'app.unifal-mg.edu.br') !== false OR in_array($a, $recipientspermitidosdevel)) $mail->AddCC($acc);
        }
    }

    if (!empty($bcc)) {
        $addressbcc = explode(',', $bcc);
        foreach($addressbcc as $abcc) {
            if(stripos($_SERVER[HTTP_HOST], 'app.unifal-mg.edu.br') !== false OR in_array($a, $recipientspermitidosdevel)) $mail->AddBCC($abcc);
        }
    }

    $mail->MsgHTML($body);
    
    if (!empty($anexos)) {
        foreach($anexos as $anexo){
            if(!empty($anexo[tmp_name])) $mail->AddAttachment($anexo[tmp_name], $anexo[name]);  // Insere um anexo
        }
    }

    $enviado = $mail->Send();// Envia o e-mail
    
    // Limpa os destinatarios e os anexos
    $mail->ClearAllRecipients();
    $mail->ClearAttachments();
    
    if($enviado) {
        return true;
    } else {
        return "Mailer Error: " . $mail->ErrorInfo;
    }
}

/**
 * Make sure the subject is ASCII-clean
 *
 * @param string $subject Subject to encode
 *
 * @return string Encoded subject
 */
function getEncodedSubject($subject) {
    if (!preg_match('/[^\x20-\x7e]/', $subject)) {
        // ascii-only subject, return as-is
        return $subject;
    }
    // Subject is non-ascii, needs encoding
    $encoded = quoted_printable_encode($subject);
    $prefix = '=?UTF-8?q?';
    $suffix = '?=';
    return $prefix . str_replace("=\r\n", $suffix . "\r\n  " . $prefix, $encoded) . $suffix;
}

//==============================================================================

/**
 * @deprecated
 * @see enviaEmailBase()
 * Funcao nao mais utilizada, substituir por enviaEmailUnifal, enviaEmailGmail ou enviaEmail
 * 
 * Send emails using phmailer
 *
 * @param string  $recipients       lista de usuarios que recebera o o e-mail separados por virgula
 * @param string  $subject          assunto do e-mail
 * @param string  $body             texto da mensagem
 * @param string  $charset          charset do texto da mensagem - padrao 'us-ascii'
 * @param string  $cc               Carbon Copy (CC) emails separado por virgulas - padrao NULL
 * @param string  $bcc              Blind Carbon Copy (CCO) separado por virgulas - padrao NULL
 * @param string  $from             email do remetente
 * @param string  $backend          'mail', 'smtp' or 'sendmail' - padrao 'smtp' - INUTILIZADO
 * @param string  $sendmail_path    padrao '/usr/bin/sendmail' - INUTILIZADO
 * @param string  $sendmail_args    padrao NULL - INUTILIZADO
 * @param string  $host             smtp server hostname - padrao 200.131.224.2
 * @param string  $port             smtp server port - padrao 25
 * @param string  $auth             smtp server authentication, TRUE/FALSE - padrao FALSE - INUTILIZADO
 * @param string  $username         smtp server username - padrao NULL
 * @param string  $password         smtp server password - padrao NULL
 * @param string  $fromname         Nome do remetente - padrao NULL
 * @param string  $replyto          Endereco de resposta - padrao NULL
 * @return mix			TRUE or error message if fails
 */
function SendMail($recipients, $subject, $body, $charset = 'us-ascii',
                  $cc = NULL, $bcc = NULL, $from = 'nti@unifal-mg.edu.br', $backend = 'smtp',
                  $sendmail_path = '/usr/bin/sendmail', $sendmail_args = NULL,
                  $host = '200.131.224.99', $port = 25, $auth = FALSE,
                  $username = NULL, $password = NULL, $fromname = NULL, $replyto = NULL) {

    require_once $_SERVER['DOCUMENT_ROOT']."/app/base/phpmailer/class.phpmailer.php";

    $mail = new PHPMailer();

    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->Host = $host; // SMTP server
    $mail->SMTPDebug = 0; // enables SMTP debug information (for testing)
                          // 1 = errors and messages
                          // 2 = messages only
    $mail->SMTPAuth = false; // enable SMTP authentication
    $mail->Helo = 'sistemas'; // enable SMTP authentication
    $mail->Port = $port; // set the SMTP port for the GMAIL server
    $mail->Username = $username; // SMTP account username
    $mail->Password = $password; // SMTP account password

    $mail->From = $from;
    if (empty($fromname)) {
    $mail->FromName = $from;
    } else {
    $mail->FromName = $fromname;
    }

    $mail->Subject = $subject;
    $mail->CharSet = $charset;

    $mail->MsgHTML($body);

    $address = explode(',', $recipients);
    foreach($address as $a) {
        $mail->AddAddress($a);
    }
    
    if (!empty($cc)) {
        $addresscc = explode(',', $cc);
        foreach($addresscc as $acc) {
        $mail->AddCC($acc);
        }
    }

    if (!empty($bcc)) {
        $addressbcc = explode(',', $bcc);
        foreach($addressbcc as $abcc) {
            $mail->AddBCC($abcc);
        }
    }
    
    if (!empty($replyto)) {
    $mail->AddReplyTo($replyto);
    }

    if(!$mail->Send()) {
        return "Mailer Error: " . $mail->ErrorInfo;
    } else {
        return true;
    }
}