Hace poco me encontré con una aplicación java que usa un WebService SOAP para enviar correos de notificaciones, así que configure un servidor de correo local ( sin ssl, sin TLS, sin seguridad ) para hacer pruebas pero luego de intentar mucho nunca funciono, así que para descartar el WebService propio de la aplicación, me hice uno en tiempo récord en php para probar, ya que desde el servidor usando el comando mail, se podían enviar correos sin ningún tipo de problemas, acá les dejo el código y de antemano les digo que el mismo es solo una prueba de concepto, no es algo para colocar en producción, así que si requiere algo parecido adapte a sus necesidades y mejorelo ( sobre todo del punto de vista de validaciones y seguridad ).
El código del servidor SOAP es el siguiente:
Si no ve el código, lo puede conseguir directamente en este enlace.
El código fuente del servicio SOAP grabelo en un archivo con el nombre sendEmail.php y ubiquelo apropiadamente en su webserver, el código fuente del cliente es:
Si no ve el código, lo puede conseguir directamente en este enlace.
Guarde el código del cliente en un archivo llamado cliente.php, tome en cuenta la url del wsdl donde está alojado el servicio SOAP ( http://localhost/sendEmail.php?wsdl ) y editela a según su conveniencia, también edite la dirección [email protected] y cambie la dirección a la cual quiere que enviar correo, para probar , acceda mediante su navegador al archivo cliente y observe la funcionalidad, si usa firefox, puede ver un bonito wsdl en http://localhost/sendEmail.php?wsdl y si no obtiene el resultado esperado no dude en revisar los archivos de logs /var/log/maillog y /var/log/httpd/error.log ( en sistemas fedora o redhat y derivados )
Referencias:
- http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php
- http://www.php.net/manual/en/class.soapserver.php
Requerimiento, instalar la librería: yum install php-pear-soap
de donde saco SOAP/Server.php y SOAP/Client.php
Saludos y gracias
No recuerdo bien por que hice esto hace tiempo y desde entonces no lo he vuelto a usar, pero creo que son las librerías soap de php, haciendo una búsqueda en un centos 6, me aparecen:
php-pear-SOAP.noarch : Simple Object Access Protocol (SOAP) Client/Server for PHP
php-soap.x86_64 : A module for PHP applications that use the SOAP protocol
Pruebe instalarlas y ejecutar los scripts a ver.
Gracias amigo voy a buscar
amigo donde estan los codigos y cual es el archivo sendmail…
Lo siento que no se veía el código, es que el código está guardado en un sitio llamado snipt.org y usaba un plugin de wordpress para mostrarlo acá y al parecer el plugin de wordpress tiene un bug y ya no sirve y no me había dado cuente, sin embargo arregle el post para que se volviera a ver el código, en todo caso y por si acaso, acá tienes los enlaces:
Servicio: http://snipt.org/wnlkj
Cliente: http://snipt.org/wnlkl
Amigo que nombre le das al archivo con el código mas largo, ese seria el cliente.php?
se mas especifico con las librerias. yo estoy en ubuntu 12.04, he usado las de nusoap en otros programas, pero no se si funcionen en el que tu das de ejemplo.
donde puedo encontrar esas librerías
«SOAP/Client.php»
«SOAP/Server.php»
se supone que deberian ser 2 archivos .php y alojarlos en la carpeta donde este el cliente.php y el SendEmail.php
probe hacer un apt.get para instalarlas y lagunas fallaron, creo que solo instalo pear.
te agradecería en el alma que fueras mas especifico, el code sin esas librerías solo se muestra en blanco.
actualmente implemento un webservices para envío de sms y correo.
Esos archivos son provistos con la librería php-pear-SOAP (en CentOS, redhat y fedora en ubuntu no se como se llama), una vez instalada por el método tradicional de tu distribución no hay que colocar los archivos en el mismo directorio donde están los ejemplos, al instalar el paquete, el mismo tiene este contenido:
[root@olivaw ~]# rpm -ql php-pear-SOAP
/usr/share/doc/pear/SOAP
/usr/share/doc/pear/SOAP/example
/usr/share/doc/pear/SOAP/example/attachment.php
/usr/share/doc/pear/SOAP/example/client.php
/usr/share/doc/pear/SOAP/example/com_client.php
/usr/share/doc/pear/SOAP/example/disco_server.php
/usr/share/doc/pear/SOAP/example/email_client.php
/usr/share/doc/pear/SOAP/example/email_gateway.php
/usr/share/doc/pear/SOAP/example/email_pop_gateway.php
/usr/share/doc/pear/SOAP/example/email_pop_server.php
/usr/share/doc/pear/SOAP/example/email_server.php
/usr/share/doc/pear/SOAP/example/example_server.php
/usr/share/doc/pear/SOAP/example/example_types.php
/usr/share/doc/pear/SOAP/example/server.php
/usr/share/doc/pear/SOAP/example/server2.php
/usr/share/doc/pear/SOAP/example/smtp.php
/usr/share/doc/pear/SOAP/example/stockquote.php
/usr/share/doc/pear/SOAP/example/tcp_client.php
/usr/share/doc/pear/SOAP/example/tcp_daemon.pl
/usr/share/doc/pear/SOAP/example/tcp_server.php
/usr/share/doc/pear/SOAP/example/wsdl_client.php
/usr/share/doc/pear/SOAP/tools
/usr/share/doc/pear/SOAP/tools/genproxy.php
/usr/share/doc/php-pear-SOAP-0.13.0
/usr/share/doc/php-pear-SOAP-0.13.0/CHANGELOG
/usr/share/doc/php-pear-SOAP-0.13.0/genproxy.php
/usr/share/pear/SOAP
/usr/share/pear/SOAP/Base.php
/usr/share/pear/SOAP/Client.php
/usr/share/pear/SOAP/Disco.php
/usr/share/pear/SOAP/Fault.php
/usr/share/pear/SOAP/Parser.php
/usr/share/pear/SOAP/Server
/usr/share/pear/SOAP/Server.php
/usr/share/pear/SOAP/Server/Email.php
/usr/share/pear/SOAP/Server/Email_Gateway.php
/usr/share/pear/SOAP/Server/TCP
/usr/share/pear/SOAP/Server/TCP.php
/usr/share/pear/SOAP/Server/TCP/Handler.php
/usr/share/pear/SOAP/Transport
/usr/share/pear/SOAP/Transport.php
/usr/share/pear/SOAP/Transport/HTTP.php
/usr/share/pear/SOAP/Transport/SMTP.php
/usr/share/pear/SOAP/Transport/TCP.php
/usr/share/pear/SOAP/Transport/TEST.php
/usr/share/pear/SOAP/Type
/usr/share/pear/SOAP/Type/dateTime.php
/usr/share/pear/SOAP/Type/duration.php
/usr/share/pear/SOAP/Type/hexBinary.php
/usr/share/pear/SOAP/Value.php
/usr/share/pear/SOAP/WSDL.php
/usr/share/tests/pear/SOAP
/usr/share/tests/pear/SOAP/tests
/usr/share/tests/pear/SOAP/tests/AllTests.php
/usr/share/tests/pear/SOAP/tests/SOAP_BugsTest.php
/usr/share/tests/pear/SOAP/tests/bug11013.phpt
/usr/share/tests/pear/SOAP/tests/bug12615.phpt
/usr/share/tests/pear/SOAP/tests/bug12880.phpt
/usr/share/tests/pear/SOAP/tests/bug14756.phpt
/usr/share/tests/pear/SOAP/tests/bug16968.phpt
/usr/share/tests/pear/SOAP/tests/bug16968.wsdl
/usr/share/tests/pear/SOAP/tests/bug1927.phpt
/usr/share/tests/pear/SOAP/tests/bug4523.phpt
/usr/share/tests/pear/SOAP/tests/dateTime.phpt
/usr/share/tests/pear/SOAP/tests/deserialize
/usr/share/tests/pear/SOAP/tests/deserialize/array.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/multiref_1.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/multiref_2.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/multiref_3.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/multiref_4.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/null.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/string.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/struct_1.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/struct_2.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/struct_3.phpt
/usr/share/tests/pear/SOAP/tests/deserialize/struct_4.phpt
/usr/share/tests/pear/SOAP/tests/example.wsdl
/usr/share/tests/pear/SOAP/tests/example_server.phpt
/usr/share/tests/pear/SOAP/tests/example_server_php5.phpt
/usr/share/tests/pear/SOAP/tests/parser.phpt
/usr/share/tests/pear/SOAP/tests/qnames_1.phpt
/usr/share/tests/pear/SOAP/tests/qnames_2.phpt
/usr/share/tests/pear/SOAP/tests/serialize
/usr/share/tests/pear/SOAP/tests/serialize/string_1.phpt
/usr/share/tests/pear/SOAP/tests/serialize/string_2.phpt
/usr/share/tests/pear/SOAP/tests/serialize/string_doc.phpt
/usr/share/tests/pear/SOAP/tests/serialize/string_doc_literal_1.phpt
/usr/share/tests/pear/SOAP/tests/serialize/string_literal_1.phpt
/usr/share/tests/pear/SOAP/tests/serialize/struct_1.phpt
/usr/share/tests/pear/SOAP/tests/serialize/struct_2.phpt
/usr/share/tests/pear/SOAP/tests/serialize/struct_3.phpt
/usr/share/tests/pear/SOAP/tests/serialize/struct_doc_literal_1.phpt
/usr/share/tests/pear/SOAP/tests/serialize/struct_literal_1.phpt
/usr/share/tests/pear/SOAP/tests/smtp.php
/usr/share/tests/pear/SOAP/tests/test.utility.php
/usr/share/tests/pear/SOAP/tests/wsdl.phpt
/usr/share/tests/pear/SOAP/tests/xmethods.php
/var/lib/pear/pkgxml/php-pear-SOAP.xml
En donde se ve que aparecen los dos librerías de las cuales dependen estos ejemplos.
El archivo sendEmail.php es el que cumple el rol de servidor, es el que en realidad envía correos y es el servicio SOAP y debe estar en un servidor web, el archivo cliente.php es simplemente un archivo para probar el servicio SOAP no requiere estar en el mismo directorio en el cual está sendEmail.php e incluso puede ser ejecutado en consola con php-cli, solo se debe tener en cuenta editar las configuraciones y parámetros de ambos archivos.
Me avisas si te funciona por favor, estos ejemplos tienen mucho tiempo de haberse hecho.
sabes que al ejecutar el sendemail.php el localhost se laguea, queda esperando. pero no envia nada.
Bien amigo gracias por tu respuesta, intentare lo que e dices. Vere que logro hacer y te informo.
Amigo te cuento que instale las librerías al menos eso creo. me baje el paquete SOAP-0.13.0 donde aparecen esas librerías de de esta pagina
http://pear.php.net/package/SOAP/download/0.13.0/
convertí el archivo en un .deb y luego lo instale en mi ubuntu.
una vez procedi a llamar el cliente y aparece lo siguiente:
Timed out read from localhostn
que crees que pueda suceder…? de antemano te agradezco en lo que puedas ayudarme.
Que no hay ningún servicio SOAP a la escucha en localhost, estás sirviendo el archivo sendEmail.php a través del webserver?
El error: time out from localhost, quiere decir que se canso de esperar algo en localhost y que nunca consiguió
BTW, revisa si no tienes: localhostn en las configuraciones, eso es diferente de localhost (localhostn =! localhost), en todo caso puedes colocar la dirección ip de la máquina donde alojas el archivo, localhost es un alias para 127.0.0.1 y es la dirección de la interfase de loopback o local de la máquina.
corrijo el error aparece: Timed out read from localhostn
con la n al final. Gracias hasta ahroa me has ayudado mucho en mi problema. Solo que en el archivo de configuracion phph. ini
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25
lo tengo asi.
donde ubico localhostn y me disculpas.
getProxy ();
// servicemthod
$erg = $proxy->sendEmail (‘[email protected]’,»prueba SOAP»,»cuerpo del mensaje»);
// return
print $erg.»n»;
?>
aparace la n al final por el retorno….