Seguro más de uno nos hemos topado con una aplicación para enviar mails y validar al menos el formato de correo, aqui les dejo esta clase, espero les sea util.
class Email
{
static MailMessage _message;
static SmtpClient _clienteSmtp;
static Attachment _at;
static int _puerto = 25;
static string _user = "", _password = "";
public static bool IsValidEmail(string email)
{
string expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
if (Regex.IsMatch(email, expresion))
{
if (Regex.Replace(email, expresion, String.Empty).Length == 0)
{ return true; }
else
{ return false; }
}
else
{ return false; }
}
public static void ConfigEmail(string from, string usuario, string contraseña, int puertoSalida, string smtp)
{
_message = new MailMessage();
_message.From = new MailAddress(from);
_clienteSmtp = new SmtpClient(smtp);
_user = usuario;
_password = contraseña;
_clienteSmtp.Port = puertoSalida;
}
public static bool SendEmail(string to, string cc, string asunto, string mensaje, string ruta_archivo_adjunto)
{
try
{
_at = new Attachment(ruta_archivo_adjunto);
_message.Attachments.Add(_at);
_message.To.Add(to);
_message.CC.Add(cc);
_message.Subject = asunto;
_message.IsBodyHtml = true; //el texto del mensaje lo pueden poner en HTML y darle formato
_message.Body = mensaje;
//Establesco que usare seguridad (ssl = Secure Sockets Layer)
_clienteSmtp.EnableSsl = true;
_clienteSmtp.UseDefaultCredentials = false;
_clienteSmtp.Credentials = new NetworkCredential(_user, _password);
ServicePointManager.ServerCertificateValidationCallback =
(s, certificate, chain, sslPolicyErrors) => true;
_clienteSmtp.Send(_message);
return true;
}
catch
{
try
{
//Establesco que no usare seguridad ssl (por si no pudo enviarlo con ssl habilitado)
_clienteSmtp.EnableSsl = false;
_clienteSmtp.Send(_message);
return true;
}
catch
{
return false;
}
}
}
}
Un poco de C#,JScript,VB, y CRM, Drupal, SQL , MSDCRM y MSDSL VBTools, developer, project lider, Social Media Activist, BlackBerry developer, telerik tools. (MCITP)
miércoles, 11 de septiembre de 2013
martes, 10 de septiembre de 2013
Error: El Proveedor 'Microsoft.ACE.OLEDB.12.0' no está Registrado en del el equipo local.
Hace unos años atrás, antes de que Microsoft Office 2010, la vida era un poco más fácil para los desarrolladores: sin embargo Office es de 32 bits, y punto, no hay mas.
Como saben ha sido un poco más complicado ya que con Microsoft Office 2010, los usuarios también pueden instalar una versión nativa de 64 bits de Office también.
Esto significa para nosotros que nuestros desarrollados de aplicaciones de 32 bits que utilizan un proveedor OLEDB para acceder a archivos de Excel o Access pueden no funcionar más ya que el proveedor de 32 bits no puede existir en una instalación de 64 bits de Office 2010.
En estos casos, a pesar de que el usuario tiene una instalación válida de Microsoft Office 2010 instalado en su máquina, su aplicación podría obtener un error como:
El Proveedor 'Microsoft.ACE.OLEDB.12.0' no está Registrado en del el equipo local.
Bueno, para hacer frente a estos problemas Microsoft lanzó un instalador llamado "Microsoft Access Database Engine 2010 Redistributable". Este redistribuible proporciona una de 32 bits o una versión de 64 bits del proveedor de Microsoft OLEDB ACE que se puede descargar quí:
Posterior mente nos vamos a nuestro proyecto propiedades -> compile -> Advanced compile options -> TARGET CPU: x86
Y con eso debe funcionar nuestra aplicación.
jueves, 27 de septiembre de 2012
How to populate a dropdown from XML
Dim oTemp As New Temp
Dim path As String path = HttpContext.Current.Request.Url.OriginalString.Substring(0, HttpContext.Current.Request.Url.OriginalString.LastIndexOf("/"))
path = path + "/XMLInfo/ConfigCompany.xml"
Dim Ds As New System.Data.DataSet Ds.ReadXml(path) RadcbCpnyId.DataSource =
Ds.Tables(0).DefaultView
RadcbCpnyId.DataTextField = "CpnyId" RadcbCpnyId.DataValueField = "ConStr" RadcbCpnyId.DataBind()
XML SAmple
CpnyId1
ConStr1
CpnyId3
ConStr3
CpnyId4
ConStr4
Dim path As String path = HttpContext.Current.Request.Url.OriginalString.Substring(0, HttpContext.Current.Request.Url.OriginalString.LastIndexOf("/"))
path = path + "/XMLInfo/ConfigCompany.xml"
Dim Ds As New System.Data.DataSet Ds.ReadXml(path) RadcbCpnyId.DataSource =
Ds.Tables(0).DefaultView
RadcbCpnyId.DataTextField = "CpnyId" RadcbCpnyId.DataValueField = "ConStr" RadcbCpnyId.DataBind()
XML SAmple
viernes, 27 de julio de 2012
SQL Server 2008 y Windows 7: Attach Database. Error: No se puede abrir el archivo físico. Problemas con el UAC (User Account Control)
Apareció un nuevo problema en mi utilización de SQL2008 y Windows 7 a la hora de adjuntar una base de datos
Con la base de ejemplo AdventureWorksLT2008 (la puedes descargar por aquí
) descargue el .mdf y el .ldf para “attacharlos”
El script:

El script:
USE [master] GO CREATE DATABASE [AdventureWorksLT2008] ON ( FILENAME = N'C:\SQLDATA\AdventureWorksLT2008_Data.mdf' ), ( FILENAME = N'C:\SQLDATA\AdventureWorksLT2008_Log.ldf' ) FOR ATTACH GO
Mensaje de Error:
Msg 5120, Level 16, State 101, Line 1
No se puede abrir el archivo físico "C:\SQLDATA\AdventureWorksLT2008_Data.mdf". Error del sistema operativo 5: "5(failed to retrieve text for this error. Reason: 15105)".
Solución 1:
Ejecutar el SSMS como Administrador.
Solución 2
La anterior solución nos da la idea que nos falta algo de permisos
desde TECHNET:
(…)El programa de instalación de SQL Server crea grupos de servicio local para los diferentes servicios de SQL Server y agrega las cuentas de servicio o los SID de servicio a estos grupos según sea necesario. Estos grupos simplifican la concesión de los permisos necesarios para ejecutar los servicios de SQL Server y otros ejecutables, y ayudan a proteger los archivos de SQL Server.(…) (mas info)
Grupo de Usuarios:
- Instancia predeterminada: SQLServerMSSQLUser$nombreDeEquipo$MSSQLSERVER
- Instancia con nombre: SQLServerMSSQLUser$nombreDeEquipo$nombreDeInstancia
jueves, 26 de julio de 2012
Hidden Fields with labels CRM4
Field
crmForm.all.ppc_address1_pais_txt.style.visibility = "hidden";
Label
crmForm.all.ppc_address1_pais_txt_c.style.visibility = "hidden";
After Convert Text Field to a Picklist include an OnChange event
Instead of clicking in on the field, to define the change event, you define it on form load.
Here is an example, where I have declared a change event in form load:
state.onchange = function(){
crmForm.all.ppc_address1_ciudad_txt.DataValue = state.SelectedText;
}
jueves, 5 de julio de 2012
CrmService.Retrieve Method Using JScript CRM4
/*-----------------Parent Accountid---------------------------*/
if (crmForm.all.parentaccountid.DataValue != null && crmForm.all.ppc_rfc_para_fact.DataValue==2) {
var parentacct = crmForm.all.parentaccountid;
var entidad = "account";
var atributo1 = "ppc_numeronit";
var atributo2 ="ppc_actualizado";
try {
var parentaccountid = parentacct.DataValue[0].id;
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); xmlhttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false);
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Retrieve"); //xmlhttp.setRequestHeader("Content-Length", xml.length); var soapBody = "" +
"" +
"" +
entidad +
" " +
"" +
parentaccountid +
" " +
"" +
"" +
"" +
atributo1 +
" " +
"" +
atributo2 +
" " +
" " +
" " +
" " +
" ";
var soapXml = "";
soapXml += GenerateAuthenticationHeader();
soapXml += soapBody;
soapXml += " ";
xmlhttp.setRequestHeader("Content-Length", soapXml.length);
xmlhttp.send(soapXml);
// Capture the result.
var resultXml = xmlhttp.responseXML; // Check for errors.
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0) {
var msg = resultXml.selectSingleNode('//description').nodeTypedValue; alert(msg);
} // Display the retrieved value.
else {
//alert(resultXml.selectSingleNode('//q1:'+atributo1).nodeTypedValue); //alert(resultXml.selectSingleNode('//q1:'+atributo2).nodeTypedValue);
if (resultXml.selectSingleNode('//q1:' + atributo2).nodeTypedValue == 1)
{
crmForm.all.ppc_num_nit_cc_fact.DataValue = resultXml.selectSingleNode('//q1:' + atributo1).nodeTypedValue;
} else {
alert('La cuenta la cuenta Primaria no ha \n sido enviada a Solomon.'); crmForm.all.ppc_num_nit_cc_fact.DataValue = '';
}
}
}
catch (e) {
alert(e.message);
}
}
if (crmForm.all.parentaccountid.DataValue != null && crmForm.all.ppc_rfc_para_fact.DataValue==2) {
var parentacct = crmForm.all.parentaccountid;
var entidad = "account";
var atributo1 = "ppc_numeronit";
var atributo2 ="ppc_actualizado";
try {
var parentaccountid = parentacct.DataValue[0].id;
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); xmlhttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false);
xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Retrieve"); //xmlhttp.setRequestHeader("Content-Length", xml.length); var soapBody = "
xmlhttp.send(soapXml);
// Capture the result.
var resultXml = xmlhttp.responseXML; // Check for errors.
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0) {
var msg = resultXml.selectSingleNode('//description').nodeTypedValue; alert(msg);
} // Display the retrieved value.
else {
//alert(resultXml.selectSingleNode('//q1:'+atributo1).nodeTypedValue); //alert(resultXml.selectSingleNode('//q1:'+atributo2).nodeTypedValue);
if (resultXml.selectSingleNode('//q1:' + atributo2).nodeTypedValue == 1)
{
crmForm.all.ppc_num_nit_cc_fact.DataValue = resultXml.selectSingleNode('//q1:' + atributo1).nodeTypedValue;
} else {
alert('La cuenta la cuenta Primaria no ha \n sido enviada a Solomon.'); crmForm.all.ppc_num_nit_cc_fact.DataValue = '';
}
}
}
catch (e) {
alert(e.message);
}
}
Suscribirse a:
Entradas (Atom)