¿Cómo podría enviar correos electrónicos usando Cocoa? ¿Qué marco usaría y cómo lo usaría?Enviar correo electrónico - Cocoa
Respuesta
Apple's Developer Connection tiene un proyecto de ejemplo llamado SBSendEmail que muestra cómo usar un Scripting Bridge para enviar correos electrónicos a través de scripts a la aplicación de correo.
Puede descargar el whole project y ejecutarlo en XCode para ver cómo funciona. De particular interés para usted será el método sendEmailMessage: Controller.m
Puede utilizar la apertura del valor predeterminado mail client o puede usar un framework. Esto debería ayudarte a comenzar.
Para Growl 1.2, escribí a Python-based mail-sending program, que la pantalla de MailMe ejecuta con NSTask.
Lo hice en gran parte por la insatisfacción con los otros marcos de correo para Cocoa, la mayoría de los cuales también admiten la recepción de correo, lo cual es innecesario para algo solo como MailMe.
Salida:
http://www.collaboration-world.com/pantomime
no he mirado en varios años, pero cuando estaba en el Apple I defendido que se incluye con el sistema operativo para reemplazar la funcionalidad de correo que habíamos perdido en la transición NeXT/Apple.
Creo que el uso de un script de Apple es la solución más simple. Lo uso cuando el usuario tiene una cuenta configurada en Mail.
AppleScript:
adjuntos es una serie de picaduras que contienen las rutas de archivos.
"set visible como true" si desea que el mensaje para que aparezca antes de enviar
- (void)sendEmailWithMail:(NSString *) toAddress withSubject:(NSString *) subject Attachments:(NSArray *) attachments {
NSString *bodyText = @"Your body text \n\r";
NSString *emailString = [NSString stringWithFormat:@"\
tell application \"Mail\"\n\
set newMessage to make new outgoing message with properties {subject:\"%@\", content:\"%@\" & return} \n\
tell newMessage\n\
set visible to false\n\
set sender to \"%@\"\n\
make new to recipient at end of to recipients with properties {name:\"%@\", address:\"%@\"}\n\
tell content\n\
",subject, bodyText, @"McAlarm alert", @"McAlarm User", toAddress ];
//add attachments to script
for (NSString *alarmPhoto in attachments) {
emailString = [emailString stringByAppendingFormat:@"make new attachment with properties {file name:\"%@\"} at after the last paragraph\n\
",alarmPhoto];
}
//finish script
emailString = [emailString stringByAppendingFormat:@"\
end tell\n\
send\n\
end tell\n\
end tell"];
//NSLog(@"%@",emailString);
NSAppleScript *emailScript = [[NSAppleScript alloc] initWithSource:emailString];
[emailScript executeAndReturnError:nil];
[emailScript release];
/* send the message */
NSLog(@"Message passed to Mail");
}
Desventaja: los usuarios necesitan tener cuentas válidas en Correo.
Script de Python (si no hay cuenta de usuario en el correo): También puede usar un script de python para enviar un mensaje. Desventaja: los usuarios tienen que ingresar los detalles de SMTP a menos que los agarre de Correo (pero luego puede usar el script de Apple anterior), o tiene que tener un reenvío de SMTP confiable codificado en su aplicación (puede configurar una cuenta de Gmail y usar para ese propósito, sin embargo, si sus aplicaciones envían demasiados mensajes de correo electrónico de Google pueden eliminar su cuenta (SPAM))
yo uso este script en Python:
import sys
import smtplib
import os
import optparse
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
username = sys.argv[1]
hostname = sys.argv[2]
port = sys.argv[3]
from_addr = sys.argv[4]
to_addr = sys.argv[5]
subject = sys.argv[6]
text = sys.argv[7]
password = getpass.getpass() if sys.stdin.isatty() else sys.stdin.readline().rstrip('\n')
message = MIMEMultipart()
message['From'] = from_addr
message['To'] = to_addr
message['Date'] = formatdate(localtime=True)
message['Subject'] = subject
#message['Cc'] = COMMASPACE.join(cc)
message.attach(MIMEText(text))
i = 0
for file in sys.argv:
if i > 7:
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(file, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))
message.attach(part)
i = i + 1
smtp = smtplib.SMTP(hostname,port)
smtp.starttls()
smtp.login(username, password)
del password
smtp.sendmail(from_addr, to_addr, message.as_string())
smtp.close()
Y me llaman formar este método para enviar un correo electrónico utilizando una cuenta de Gmail
- (bool) sendEmail:(NSTask *) task toAddress:(NSString *) toAddress withSubject:(NSString *) subject Attachments:(NSArray *) attachments {
NSLog(@"Trying to send email message");
//set arguments including attachments
NSString *username = @"[email protected]";
NSString *hostname = @"smtp.gmail.com";
NSString *port = @"587";
NSString *fromAddress = @"[email protected]";
NSString *bodyText = @"Body text \n\r";
NSMutableArray *arguments = [NSMutableArray arrayWithObjects:
programPath,
username,
hostname,
port,
fromAddress,
toAddress,
subject,
bodyText,
nil];
for (int i = 0; i < [attachments count]; i++) {
[arguments addObject:[attachments objectAtIndex:i]];
}
NSData *passwordData = [@"myGmailPassword" dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *environment = [NSDictionary dictionaryWithObjectsAndKeys:
@"", @"PYTHONPATH",
@"/bin:/usr/bin:/usr/local/bin", @"PATH",
nil];
[task setEnvironment:environment];
[task setLaunchPath:@"/usr/bin/python"];
[task setArguments:arguments];
NSPipe *stdinPipe = [NSPipe pipe];
[task setStandardInput:stdinPipe];
[task launch];
[[stdinPipe fileHandleForReading] closeFile];
NSFileHandle *stdinFH = [stdinPipe fileHandleForWriting];
[stdinFH writeData:passwordData];
[stdinFH writeData:[@"\n" dataUsingEncoding:NSUTF8StringEncoding]];
[stdinFH writeData:[@"Description" dataUsingEncoding:NSUTF8StringEncoding]];
[stdinFH closeFile];
[task waitUntilExit];
if ([task terminationStatus] == 0) {
NSLog(@"Message successfully sent");
return YES;
} else {
NSLog(@"Message not sent");
return NO;
}
}
espero que ayude
intenté con su código pero el problema es que cuando lo ejecuta, dice que programPath no está definido. Ahora lo configuré en el camino de mi programa usando NSString pero todavía no funcionó ... ¿qué debería hacer? –
Es la ruta del script y se define como: programPath = [[[NSBundle bundleForClass: [self class]] pathForResource: @ "emailSender" ofType: @ "py"] copy]; – Tibidabo
agregué el código de recurso de python en mi proyecto con el nombre emailSender.py. También escribió el código \t NSBundle * programPath = [[[NSBundle bundleForClass: [self class]] pathForResource: @ "emailSender" ofType: @ "py"] copy]; Todos los errores desaparecieron pero no se envió ningún correo electrónico. La consola muestra estos detalles. POR FAVOR AYUDA !!! –
- 1. Enviar correo electrónico desde Cocoa
- 2. vb.net enviar correo electrónico
- 3. C# Enviar correo electrónico masivo
- 4. cómo enviar correo electrónico HTML
- 5. enviar correo electrónico desde localhost
- 6. iphone app enviar correo electrónico
- 7. ¿Enviar correo electrónico de Elmah?
- 8. enviar correo electrónico asp.net C#
- 9. Enviar correo electrónico asincrónico con phpmailer
- 10. Enviar una tabla en el correo electrónico
- 11. Enviar correo electrónico programáticamente en Android
- 12. Enviar notificación por correo electrónico de Jenkins
- 13. Enviar correo electrónico con attchement usando System.Net.Mail
- 14. Guión de shell para enviar correo electrónico
- 15. Node.js - Enviar correo electrónico en el registro
- 16. MVC HTML5 enviar por correo electrónico
- 17. Enviar correo electrónico desde un desencadenador
- 18. Lote Enviar correo electrónico con SwiftMailer
- 19. Log4Net + ¿Enviar correo electrónico cuando haya terminado?
- 20. Enviar correo electrónico de activación al usuario
- 21. Enviar correo electrónico a múltiples direcciones Android
- 22. ¿Cómo enviar archivos adjuntos de correo electrónico?
- 23. Usando Android Intent.ACTION_SEND para enviar correo electrónico
- 24. Enviar correo electrónico automático mediante programación
- 25. Enviar correo electrónico-Simulador de Iphone
- 26. PHP enviar correo a varias direcciones de correo electrónico
- 27. Enviar correo electrónico con saltos de línea mediante correo electrónico() en php
- 28. Enviar correo electrónico con archivo adjunto mediante aplicación de correo electrónico del cliente
- 29. Problema de correo electrónico (enviar hipervínculo en el cuerpo del correo electrónico) android
- 30. KRL: ¿puedo enviar un correo electrónico con el correo electrónico: forward()?
Tenga en cuenta que Scripting Bridge no está permitido con la aplicación sandbox. – jemeshsu
Esto no es verdad; puede usar Scripting Bridge con las autorizaciones correctas –