terça-feira, 31 de março de 2009

Enviando e-mails com Java Mail



Nesse artigo iremos citar um pequeno exemplo de como enviar e-mails de forma automatizada a partir de Servlets ou do seus aplicativos Java utilizando a API Java Mail.

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public void postMail( String recipients[ ], String subject, String message , String from) throws MessagingException
{
boolean debug = false;

Properties props = new Properties();
props.put("mail.smtp.host", "SMTP.SERVER.COM");

Session session = Session.getDefaultInstance(props, null);
session.setDebug(debug);

Message msg = new MimeMessage(session);

InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);

InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++)
{
addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);

msg.addHeader("MyHeaderName", "myHeaderValue");

msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}


Para utilizar o metodo acima, os parametros são:

String to : Endereço do destinatário.
String subject : Assunto do email.
String message -- Conteudo da Mensagem.
String from -- Endereço do remetente.
SMTP.SERVER.COM -- Substitua pelo endereço do servidor SMTP.

Espero ter ajudado. Boa Sorte.

domingo, 29 de março de 2009

Upload de arquivos com PHP e Safemode Habilitado (safemode=on)



A maioria dos hostings compartilhados utilizam a diretiva safemode=on na configuração do php.ini. Isso restringe o desenvolvedor a utilizar funções que tem potencial de colocar o sistema em risco. Um função muito utilizada pelos scripts de upload é a move_uploaded_file() e mkdir() quando necessario, porém temos alguns problemas:

Warning: mkdir(/www/docs/dir/) [function.mkdir]: Permission denied in (...)
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move (...)


Um alternativa completa para uploads de arquivos via php é utilizar a função FTP.

Enviando um arquivo:


<?php

$ftp_server = '200.195.111.2';

$ftp_user_name = 'manager';

$ftp_user_pass = 'sd298sample1';

$file = 'file1.txt';

$remote_file = 'readme.txt';

$conn_id = ftp_connect($ftp_server);

$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {

echo "Arquivo enviado com sucesso $file\n";

} else {

echo "Erro ao enviar $file\n";

}

ftp_close($conn_id);

?>



Criando um diretório:

<?php

$ftp_server = '200.195.111.2';

$ftp_user_name = 'manager';

$ftp_user_pass = 'sd298sample1';

$dir = 'www';

$conn_id = ftp_connect($ftp_server);

$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

if (ftp_mkdir($conn_id, $dir)) {

echo "Dir criado com êxito: $dir\n";

} else {

echo "Erro ao criar a pasta $dir\n";

}

ftp_close($conn_id);
?>


Espero ter ajudado. Boa sorte.

sexta-feira, 27 de março de 2009

Permission denied: .htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable.



Se você receber um erro 403 no seu site com a seguinte mensagem no error log

Permission denied: /home/user/public_html/subdomain/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable.


Certifique-se que o public_html e os subdiretorios possuem permissão para ler e executar. Se necessário, aplique as permissões e reinicie o apache para corrigir o problema.

quinta-feira, 26 de março de 2009

Exportar dados de um GridView/DataGrid para excel em .NET



Código para exportação:



private void ExportExcel() {
Response.Clear();
exportando = true;

Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");

Response.Charset = "";

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Response.ContentType = "application/vnd.xls";

StringWriter stringWrite = new System.IO.StringWriter();

HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
this.EnableViewState = false;
gridview1.RenderControl(htmlWrite);

Response.Write(stringWrite.ToString());

Response.End();
}


Parece bem simples o código, mas em .NET sempre tem um truque para não receber aquela exception linda na tela...


A parte do segredo agora:

public override void VerifyRenderingInServerForm(Control control)
{
if (!exportando)
{
base.VerifyRenderingInServerForm(control);
}
}

Se não for incluido este override na página ocorre a seguinte exception:



Controle 'gridview1' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server.
Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da Exceção: System.Web.HttpException: Controle 'gridview1' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server.

Erro de Origem:


Linha 57: HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
Linha 58: this.EnableViewState = false;
Linha 59: gridview1.RenderControl(htmlWrite);
Linha 60:
Linha 61: Response.Write(stringWrite.ToString());


Arquivo de Origem: c:\Inetpub\wwwroot\PublicadorTerraTV\trunk\PublisherWebSite\ExportTree.aspx.cs Linha: 59

Rastreamento de Pilha:


[HttpException (0x80004005): Controle 'gridview1' do tipo 'GridView' deve ser inserido em uma marca de formato com runat=server.]
System.Web.UI.Page.VerifyRenderingInServerForm(Control control) +2049759
System.Web.UI.WebControls.GridView.Render(HtmlTextWriter writer, Boolean renderPanel) +37
System.Web.UI.WebControls.GridView.Render(HtmlTextWriter writer) +30
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +25
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +121
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +22
Terra.Publicador.View.ExportTree.ExportExcel() in c:\Inetpub\wwwroot\PublicadorTerraTV\trunk\PublisherWebSite\ExportTree.aspx.cs:59
Terra.Publicador.View.ExportTree.lnkExport_OnClick(Object sender, EventArgs e) in c:\Inetpub\wwwroot\PublicadorTerraTV\trunk\PublisherWebSite\ExportTree.aspx.cs:41
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +86
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +115
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746




--------------------------------------------------------------------------------



É aquele erro que vc pergunta que diabos eu fiz de errado...

terça-feira, 24 de março de 2009

Como enviar emails utilizando ASP.NET



No ASP.Net é possível enviar email em formato texto ou html, com ou sem arquivos anexos, sem utilizar um componente específico para isso, através apenas de programação. Seguem abaixo dois exemplos de envio de email pelo ASP.Net utilizando a linguagem C#.

• Enviar Mensagens no Formato Texto

email1.aspx

<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<!--Inclui o namespace para envio de emails -->
<%@ Import Namespace="System.Web.Mail" %>
<html>
<script runat="server">
public void Page_Load(Object Sender, EventArgs e)
{

//Instancia o Objeto Email como MailMessage
MailMessage Email = new MailMessage();

//Atribui ao método From o valor do Remetente
Email.From = "seunome@xyz.com.br";

//Atribui ao método To o valor do Destinatário
Email.To = "email@dominio";


//Atribui ao método Cc o valor do com Cópia
Email.Cc = "email2@dominio";

//Atribui ao método Bcc o valor do com Cópia oculta
Email.Bcc = "email3@dominio";

//Atribui ao método Subject o assunto da mensagem
Email.Subject = "Teste de Envio de mensagens";

//Define o formato da mensagem que pode ser Texto ou Html
Email.BodyFormat = MailFormat.Text;

//Atribui ao método Body a texto da mensagem
Email.Body = "Texto da mensagem";

//Define qual o host a ser usado para envio de mensagens.
SmtpMail.SmtpServer = "localhost";

//Envia a mensagem baseado nos dados do objeto Email
SmtpMail.Send(Email);

//Escreve no label que a mensagem foi enviada
Response.Write("Email enviado com sucesso!");
}
</script>
</html>



• Mensagens no Formato Texto com a Inclusão de Anexos

<%@ Page Language="C#" %>
<%@ import Namespace="System" %>
<!--Inclui o namespace para envio de emails -->
<%@ Import Namespace="System.Web.Mail" %>


<html>

<script runat="server">

public void Page_Load(Object Sender, EventArgs e)
{

//Instancia o Objeto Email como MailMessage
MailMessage Email = new MailMessage();

//Atribui ao método From o valor do Remetente
Email.From = "seunome@xyz.com.br";

//Atribui ao método To o valor do Destinatário
Email.To = "email@dominio";

//Atribui ao método Cc o valor do com Cópia
Email.Cc = "email2@dominio";

//Atribui ao método Bcc o valor do com Cópia oculta
Email.Bcc = "email3@dominio";

//Atribui ao método Subject o assunto da mensagem
Email.Subject = "Teste de Envio de mensagens";

//Define o formato da mensagem que pode ser Texto ou Html
Email.BodyFormat = MailFormat.Text;

//Atribui ao método Body a texto da mensagem
Email.Body = "Texto da mensagem";

//Inclui o arquivo anexo especificado na
Email.Attachments.Add(new MailAttachment ("e:\\home\\seulogin_ftp\\web\\arquivo.gif"));


//Define qual o host a ser usado para envio de mensagens.
SmtpMail.SmtpServer = "localhost";

//Envia a mensagem baseado nos dados do objeto Email
SmtpMail.Send(Email);

//Escreve no label que a mensagem foi enviada
Response.Write("Email enviado com sucesso!");
}

</script>

</html>



• Enviar Mensagens no Formato HTML

Em muitas das mensagens no formato Html costuma ter imagens e logos na mensagem então no texto html você não precisa especificar a url inteira se usar o comando Email.UrlContentBase = “http://www.xyz.com.br” ele inclui a url base para as imagens que forma usadas no código html, por exemplo, você especificaria a imagem que estaria em http://www.xyz.com.br/imagens/logo.gif como apenas imagens/logo.gif

<%@ Page Language="C#" %>
<!--Inclui o namespace para envio de emails -->
<%@ import Namespace="System" %>
<%@ Import Namespace="System.Web.Mail" %>
<html>
<script runat="server">

public void Page_Load(Object Sender, EventArgs e)
{

//Instancia o Objeto Email como MailMessage
MailMessage Email = new MailMessage();

//Atribui ao método From o valor do Remetente
Email.From = "seunome@xyz.com.br";

//Atribui ao método To o valor do Destinatário
Email.To = "email@dominio";


//Atribui ao método Cc o valor do com Cópia
Email.Cc = "email2@dominio";

//Atribui ao método Bcc o valor do com Cópia oculta
Email.Bcc = "email3@dominio";

//Atribui ao método Subject o assunto da mensagem
Email.Subject = "Teste de Envio de mensagens";

//Define o formato da mensagem que pode ser Texto ou Html
Email.BodyFormat = MailFormat.Html;

//Atribui ao método Body a texto da mensagem
Email.Body = "Texto da mensagem";

//Define qual a url que deve ser usada como caminho para as imagens informadas no código html
Email.UrlContentBase = "http://www.xyz.com.br";

//Define qual o host a ser usado para envio de mensagens.
SmtpMail.SmtpServer = "localhost";

//Envia a mensagem baseado nos dados do objeto Email
SmtpMail.Send(Email);

//Escreve no label que a mensagem foi enviada
Response.Write("Email enviado com sucesso!");
}

</script>

</html>


Fonte: Locaweb.