Sexta-feira, 12 de Junho de 2009

Componentes de E-mail ASP

Para quem usa Classic ASP 3, abaixo colocamos alguns exemplos de código para o uso dos componentes de envio de e-mail mais utilizados em hosting compartilhado.


Advantys ASPSmartMail

<%
Set objSmartMail = Server.CreateObject("aspSmartMail.SmartMail")
objSmartMail.Server = "smtp.dominio.com"
objSmartMail.SenderName = "Nome do Remetente"
objSmartMail.SenderAddress = "meuemail@teste.com"
objSmartMail.Recipients.Add("destinatario@teste.com", "Nome do destinatario")
objSmartMail.Subject = "Assunto do Email"
objSmartMail.Body = "Conteudo do email"
objSmartMail.SendMail()
Set objSmartMail = Nothing
%>

Persits AspEmail
<%
Set objAspEmail = Server.CreateObject("Persits.MailSender")
objAspEmail.Host = "smtp.dominio.com"
objAspEmail.FromName = "Nome do Remetente"
objAspEmail.From = "meuemail@teste.com"
objAspEmail.AddAddress "destinatario@teste.com"
objAspEmail.Subject = "Assunto do Email"
objAspEmail.Body = "Conteudo do email"
objAspEmail.Send()
Set objAspEmail = Nothing
%>

Dundas Mailer
<%
Set objDundasMailer = Server.CreateObject("Dundas.Mailer")
objDundasMailer.SMTPRelayServers.Add "smtp.dominio.com", 25
objDundasMailer.TOs.Add "destinatario@teste.com"
objDundasMailer.FromAddress = "meuemail@teste.com"
objDundasMailer.Subject = "Assunto do Email"
objDundasMailer.HTMLBody = "Conteudo do email"
objDundasMailer.SendMail()
Set objDundasMailer = Nothing
%>

Jmail

<%
Set objJmail = Server.CreateOBject("JMail.Message")
objJmail.From = "meuemail@teste.com"
objJmail.AddRecipient "destinatario@teste.com"
objJmail.Subject = "Assunto do Email"
objJmail.Body = "Conteudo do email"
objJmail.Send("smtp.dominio.com")
Set objJmail = Nothing
%>

SoftArtisans SMTPmail
<%
Set objSASMTPMail = Server.CreateObject("SoftArtisans.SMTPMail")
objSASMTPMail.FromName = "Nome do Remetente"
objSASMTPMail.FromAddress = "meuemail@teste.com"
objSASMTPMail.RemoteHost = "smtp.dominio.com"
objSASMTPMail.AddRecipient("destinatario@teste.com", "Nome do destinatario")
objSASMTPMail.Subject = "Assunto do Email"
objSASMTPMail.BodyText = "Conteudo do email"
objSASMTPMail.SendMail()
Set objSASMTPMail = Nothing
%>

Microsoft CDonts
<%
Set objCdonts = Server.CreateObject("CDONTS.NewMail")
objCdonts.From = "meuemail@teste.com"
objCdonts.To = "destinatario@teste.com"
objCdonts.Subject = "Assunto do Email"
objCdonts.Body = "Conteudo do email"
objCdonts.Send ()
Set objCdonts = Nothing
%>

Microsoft CDOSys
<%
Set objCDOSYSMail = Server.CreateObject("CDO.Message")
Set objCDOSYSCon = Server.CreateObject ("CDO.Configuration")
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.dominio.com"
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objCDOSYSCon.Fields.Update
Set objCDOSYSMail.Configuration = objCDOSYSCon
objCDOSYSMail.From = "meuemail@teste.com"
objCDOSYSMail.To = "destinatario@teste.com"
objCDOSYSMail.Subject = "Assunto do Email"
objCDOSYSMail.HTMLBody = "Conteudo do email"
objCDOSYSMail.Send()
Set objCDOSYSMail = Nothing
Set objCDOSYSCon = Nothing
%>



Lembre-se:

Ao receber a mensagem

Server object error 'ASP 0177 : 800401f3'

Server.CreateObject Failed


tentando utilizar um dos scripts, significa que o servidor onde está o site não possui este componente instalado.

Quinta-feira, 28 de Maio de 2009

Upload de Arquivos em C#

<%@ Page Language="C#" Debug="true" %>
<%@ Import NameSpace="System" %>
<%@ Import NameSpace="System.IO" %>
<script runat="server">
void DoUpload(object sender, EventArgs e)
{
if (FileUpload1.PostedFile.FileName == "")
{
lblResposta.Text = "Nenhum arquivo selecionado";
}
else
{
FileInfo fileInfo = new FileInfo(FileUpload1.PostedFile.FileName);
string strPath = Server.Mappath("/") + "\\" + fileInfo.Name;
FileUpload1.PostedFile.SaveAs(strPath);
lblResposta.Text = "Arquivo gravado com sucesso!";
}
}
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Titulo</title>
</head>
<body>
<form enctype="multipart/form-data" runat="server">
<asp:label ID="lblResposta" runat="server" /><br><br>
<asp:FileUpLoad id="FileUpload1" runat="server" />
<asp:Button ID="enviar" Text="Enviar" OnClick="DoUpload" runat="server" />
</form>
</body>
</html>


A exeção UnauthorizedAccessException: Access to the path 'x' is denied pode ser acionada. Caso isso ocorra, o usuario que esta rodando o script, geralmente IUSR, ASPNET ou Network Services, não possui as permissões para acessar esse caminho.

Segunda-feira, 6 de Abril de 2009

RSS.NET não lê a tag <enclosure />

Ao utilizarmos a lib RSS.NET para ler e escrever feeds RSS, recebemos o valor null ao ler a tag <enclosure>. Isso ocorre porque a tag enclosure não possui um valor. Possui apenas atributos, como mostramos abaixo:
<enclosure url="" type="" length="" />

Para resolver esse problema, faça o download do código fonte do RSS.Net, abra-o no Visual Studio e edite o arquivo RssReader.cs

Você deve adicionar uma condição reader.AttributeCount==0 para isso funcionar. Exemplo:

Altere a linha 165 disso:

switch (reader.NodeType)
{
case XmlNodeType.Element:
{
if (reader.IsEmptyElement)
break;


Para isso:


switch (reader.NodeType)
{
case XmlNodeType.Element:
{
if (reader.IsEmptyElement && (reader.AttributeCount==0))
break;


Recompile a biblioteca e inclua no seu projeto novamente. Espero ter ajudado.

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

Exportando dados 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...