terça-feira, janeiro 04, 2011

PowerBuilder – Enviando e-mail por SMTP - Parte 3 / 4

 3)   Criar o Objeto  n_mail (abaixo o export do objeto)

$PBExportHeader$uo_email.sru
forward
global type uo_email from nonvisualobject
end type
end forward

global type uo_email from nonvisualobject
end type
global uo_email uo_email

type variables

/* ***** Configurações do Servidor ***** */
String is_Server_SMTP // IP ou nome do servidor de SMTP
String is_Server_Port = '25' // Porta SMTP no servidor (default = 25)
String is_Server_UserId // ID ou login no servidor SMTP
String is_Server_UserPass // Password no servidor SMTP

Boolean ib_Server_smtpAuth // Se o servidor necessita de autenticação por login/senha (is_Server_UserId, is_Server_UserPass) (Default = False)
Boolean ib_Server_TLS_Encryption // Se o servidor SMTP requer criptografia TLS (Default = False)

//Ex. Para GMail:
//is_Server_SMTP = "smtp.gmail.com"
//is_Server_Port = "465"
//is_Server_UserId =
//is_Server_UserPass =
//ib_Server_smtpAuth = True
//ib_Server_TLS_Encryption = True

/* ***** Fim Configurações do Servidor ***** */

/* ***** Dados para envio do E-Mail ***** */
String is_email_to_name[] // Nomes para aparecer no endereço de email (destinatários) - Opcional
String is_email_to_address[] // Endereços de email (destinatários)
String is_email_from_name // Nome para aparecer no sender do email - Opcional
String is_email_from_address // Sender do email
String is_email_subject // Título do email
String is_email_body // Corpo (texto) do email
String is_email_attach[] // Anexos do email - Opcional
Boolean ib_email_receipt // Se deseja receber confirmação de recebimento (Default = False)

//Ex. de e-mail:
//is_email_to_name[1] = 'José da Silva'
//is_email_to_address[1] = 'jose@email.com'
//is_email_from_name[] 'Maria da Silva'
//is_email_from_address[] 'Maria@email.com'
//is_email_subject = 'Teste de e-mail'
//is_email_body 'Este é um email de teste'
//is_email_attach[1] = 'D:\Teste.txt'
//ib_email_receipt = False

/* ***** Fim Dados para envio do E-Mail ***** */

/* ***** Outras variáveis ***** */

end variables
forward prototypes
public function string of_send_email ()
public function string of_server_data ()
public function string of_email_data ()
end prototypes

public function string of_send_email ();
// Função principal para envio de email. Necessita do preenchimento das variáveis de instância de configuração do servidor
// e dos dados do e-mail.

String ls_ret
Long i
Boolean lb_ret

n_smtp ln_smtp

SetPointer(HourGlass!)

/* ***** Validações ***** */
// Dados do servidor
ls_ret = of_server_data()
If ls_ret <> '' Then Return ls_ret

// Dados do email
ls_ret = of_email_data()
If ls_ret <> '' Then Return ls_ret

/* ***** Fim Validações ***** */

/* ***** Dados para envio do email ***** */
ln_smtp.of_ResetAll()

// Propriedades do servidor
ln_smtp.of_SetServer(is_server_SMTP)
ln_smtp.of_SetPort(Long(is_server_Port))

If ib_Server_smtpAuth Then
               ln_smtp.of_SetLogin(is_Server_UserId, is_Server_UserPass)
End If

// Dados do email
ln_smtp.of_SetReceipt(ib_email_receipt)
ln_smtp.of_SetLogFile(False)
ln_smtp.of_SetSubject(is_email_Subject)
ln_smtp.of_SetBody(is_email_body, False)
ln_smtp.of_SetFrom(is_email_from_address, is_email_from_name)

// Destinatários
For i = 1 To UpperBound(is_email_to_address[])
               If UpperBound(is_email_to_name[]) >= i Then
                               ln_smtp.of_AddAddress(is_email_to_address[i], is_email_to_name[i])
               Else
                               ln_smtp.of_AddAddress(is_email_to_address[i])
               End If
Next

// Anexos
For i = 1 To UpperBound(is_email_attach[])
               ln_smtp.of_AddAttachment(is_email_attach[i])
Next

/* ***** Fim Dados para envio do email ***** */

/* ***** Envia o e-mail ***** */
If ib_Server_TLS_Encryption Then
               lb_ret = ln_smtp.of_SendTLSMail()
Else
               lb_ret = ln_smtp.of_SendMail()
End If

If lb_ret Then
               // Email enviado com sucesso
               Return ''
Else
               // Falha no envio do email
               return ln_smtp.of_GetLastError()
End If
/* ***** Fim Envia o e-mail ***** */

end function

public function string of_server_data ();
// Valida os dados de configuração do servidor

is_server_SMTP = Trim(is_server_SMTP)
If IsNull(is_server_SMTP) or is_server_SMTP = '' Then Return 'Especifique o servidor SMTP'

is_Server_Port = Trim(is_Server_Port)
If IsNull(is_Server_Port) or IsNumber(is_Server_Port) = False or is_Server_Port = '0' Then Return 'Especifique a porta do servidor SMTP'

If ib_Server_smtpAuth Then
               is_Server_UserId = Trim(is_Server_UserId)
               If IsNull(is_Server_UserId) or is_Server_UserId = '' Then Return 'A opção de autenticação está marcada, então informe o usuário do servidor SMTP'

               is_Server_UserPass = Trim(is_Server_UserPass)
               If IsNull(is_Server_UserPass) or is_Server_UserPass = '' Then Return 'A opção de autenticação está marcada, então informe a senha do servidor SMTP'
End If

Return ''

end function

public function string of_email_data ();
// Valida os dados de envio do email

Long i

If UpperBound(is_email_to_address[]) = 0 Then Return 'Informe pelo menos 1 (um) destinatário'
If UpperBound(is_email_to_address[]) > 0 and UpperBound(is_email_to_name[]) > 0 and UpperBound(is_email_to_address[]) <> UpperBound(is_email_to_name[]) Then
               Return 'A lista de nomes dos destinatários está com tamanho diferente da lista de emails dos destinatários'
End If

For i = 1 To UpperBound(is_email_to_name[])
               is_email_to_name[i] = Trim(is_email_to_name[i])
Next
For i = 1 To UpperBound(is_email_to_address[])
               is_email_to_address[i] = Trim(is_email_to_address[i])
Next

is_email_from_name = Trim(is_email_from_name)
is_email_from_address = Trim(is_email_from_address)
If IsNull(is_email_from_address) or is_email_from_address = '' Then Return 'Informe o sender do email'

is_email_subject = Trim(is_email_subject)
If IsNull(is_email_subject) or is_email_subject = '' Then Return 'Informe o título do email'

is_email_body = Trim(is_email_body)
If IsNull(is_email_body) or is_email_body = '' Then Return 'Informe o texto para o corpo do email'

Return ''

end function

on uo_email.create
call super::create
TriggerEvent( this, "constructor" )
end on

on uo_email.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

Nenhum comentário: