none
SMTP IIS 6.0 - Mensagens não saem da pasta pickup RRS feed

  • Pergunta

  • Olá Pessoal,

    Eu estou tentando homologar uma aplicação que fiz em asp.net que envia um formulário por email. No visual studio funciona que é uma beleza, porém ao colocar no servidor de teste para homologação, o código é executado e não recebo nenhuma exceção. Ou seja, o arquivo do email é gerado e o método que envia o email aparentemente funciona.

    Acontece que ao visualizar a pasta inetpub\mailroot\pickup, o arquivos eml. referentes às mensagens a serem enviadas não são tratados pelo smtp virtual server do IIS 6.0.

    Eu copiei a configuração de outro servidor iis, que funciona numa boa. Se eu copiar os arquivos gerados para a pasta pickup deste segundo servidor, as mensagens são entregues.

    segue abaixo o código para o envio do email e o web.config

    Code-behind:
        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            try
            {
                //Enviar email
                Email();
    
                Response.Write("<script language=\"javascript\" type=\"text/javascript\">alert('Solicitação concluída!');</script>");
    
                txtPassageiros.Text = "";
                txtItinerario.Text = "";
                txtIda.Text = "";
                txtHorarioIda.Text = "";
                txtVolta.Text = "";
                txtHorarioVolta.Text = "";
                txtHotelSugerido.Text = "";
                txtObservacoes.Text = "";
                txtPeriodoInicial.Text = "";
                txtPeriodoFinal.Text = "";
                txtDirecao.Text = "";
                txtCentroCusto.Text = "";
                txtProjeto.Text = "";
                txtDepartamento.Text = "";
                txtPressuposto.Text = "";
                txtConceitoGasto.Text = "";
                txtMotivoViagem.Text = "";
                txtSolicitadoPor.Text = "";
            }
            catch (Exception ex)
            {
                Response.Write("<script language=\"javascript\" type=\"text/javascript\">alert('Houve uma falha no envio da solicitação!');</script>");
                throw ex;
            }
    
            
        }
    
        /// <summary>
        /// Método que envia e-mail para o funcionário de compras da empresa
        /// </summary>
        protected void Email()
        {
            try
            {
                DateTime dataHoraEmail = DateTime.Now;
    
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("<html><body style='font-family:Arial;'>");
                sb.Append("<h1>Nova solicitação de viagem</h1><br>");
                sb.Append(dataHoraEmail.ToLongTimeString() + " de " + dataHoraEmail.ToShortDateString());
                sb.Append("<br /><br />");
                sb.Append("<b>Nome do solicitante:</b> "+txtSolicitadoPor.Text);
                sb.Append("<br /><br />");
                sb.Append("<b>Nome do(s) passageiro(s):</b> " + txtPassageiros.Text);
                sb.Append("<br />");
                sb.Append("<b>Itinerário: </b> " + txtItinerario.Text);
                sb.Append("<br />");
                sb.Append("<b>Ida:</b> " + txtIda.Text +" - "+ txtHorarioIda.Text);
                sb.Append("<br />");
                sb.Append("<b>Volta:</b> " + txtVolta.Text + " - " + txtHorarioVolta.Text);
                sb.Append("<br />");
                sb.Append("<b>Observações:</b> " + txtObservacoes.Text);
                sb.Append("<br /><br />");
                sb.Append("<b>Hotel sugerido:</b> " + txtHotelSugerido.Text);
                sb.Append("<br />");
                sb.Append("<b>Período:</b> " + txtPeriodoInicial.Text + " a "+ txtPeriodoFinal.Text);
                sb.Append("<br /><br />");
                sb.Append("<h2>Dados para Ordem de Compra(OC):</h2><br />");
                sb.Append("<b>Direção:</b> " + txtDirecao.Text);
                sb.Append("<br />");
                sb.Append("<b>Centro de Custo:</b> " + txtCentroCusto.Text);
                sb.Append("<br />");
                sb.Append("<b>Projeto:</b> " + txtProjeto.Text);
                sb.Append("<br />");
                sb.Append("<b>Pressuposto:</b> " + txtPressuposto.Text);
                sb.Append("<br />");
                sb.Append("<b>Conceito do gasto:</b> " + txtConceitoGasto.Text);
                sb.Append("<br /><br />");
                sb.Append("<b>Motivo da viagem: </b> " + txtMotivoViagem.Text);
                sb.Append("<br /><br />");
                sb.Append("<b>Solicitado por: </b> " + txtSolicitadoPor.Text);
                sb.Append("</body></html>");
    
                string mailFrom = "SharePoint@Cliente.com.br";
                string mailTo = "pessoa@dominio.com.br";
    
                System.Net.Mail.MailMessage mailConteudo = new System.Net.Mail.MailMessage(mailFrom, mailTo);
                //mailConteudo.CC.Add(new MailAddress("email@endereco.com")); 
                mailConteudo.Subject = "Nova solicitação de viagem - " + txtSolicitadoPor.Text +" ("+ dataHoraEmail.ToShortDateString() + " " + dataHoraEmail.ToLongTimeString() + ")";
                mailConteudo.Body = sb.ToString();
                mailConteudo.IsBodyHtml = true;
    
                //string smtphost = System.Configuration.ConfigurationManager.AppSettings["smtp.dominio.com.br"];
                string smtphost = "intranet.dominio.com";
    
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(smtphost);
                smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.PickupDirectoryFromIis;
    
                smtp.Send(mailConteudo);
    
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

    web.config :
    <?xml version="1.0"?>
    <configuration>
    	<configSections>
    		<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    			<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    				<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
    				<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    					<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
    					<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
    					<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
    				</sectionGroup>
    			</sectionGroup>
    		</sectionGroup>
    	</configSections>
    	<appSettings/>
    	<connectionStrings/>
    	<system.web>
               <pages>
    	         <controls>
    			<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    		 </controls>
               </pages>
    		<compilation debug="true">
    			<assemblies>
    				<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    				<add assembly="System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    				<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    				<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies>
    		</compilation>
    		<httpHandlers>
    			<remove verb="*" path="*.asmx"/>
    			<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    			<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    			<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
    		</httpHandlers>
    		<httpModules>
    			<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    		</httpModules>
    
                             <authentication mode="Windows"/>
                             <identity userName="INTRANET\admin" password="xxxxx" />
    
    		<customErrors mode="Off"/>
    	</system.web>
    
    	<system.webServer>
    		<validation validateIntegratedModeConfiguration="false"/>
    		<modules>
    			<add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    		</modules>
    		<handlers>
    			<remove name="WebServiceHandlerFactory-ISAPI-2.0"/>
    			<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    			<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    			<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    		</handlers>
    	</system.webServer>
    </configuration>

    Sei que parece que o problema é da infraestrutura, mas se for um problema de infraestrutura, aonde seria? Minha opinião inicial era essa, porém ambos os virtual smtp servers possuem a mesma configuração e vi que as portas certas estão configuradas tb.

    Desde já, obrigado pela ajuda.
    Filipe.
    segunda-feira, 8 de junho de 2009 20:57

Respostas

  • O SMTP Virtual Server do IIS 6.0 parece simplesmente não funcionar adequadamente para uma aplicação ASP.NET quando hospedando também o sharepoint. Minha solução para este problema foi usar um servidor SMTP próprio para o envio de emails.
    • Marcado como Resposta Filipe M. _ sexta-feira, 26 de junho de 2009 14:23
    sexta-feira, 26 de junho de 2009 14:23