SDK iOS đã thực sự dễ dàng gửi email bằng API tích hợp. Với một vài dòng mã, bạn có thể khởi chạy giao diện email giống như ứng dụng Thư cổ phiếu cho phép bạn soạn email. Bạn có thể bật lên biểu mẫu soạn thư, viết thư và có thể gửi thư thường hoặc tệp đính kèm thư bằng cách sử dụng lớp MFMailComposeViewController. Để biết thêm thông tin: Gửi e-mail từ Ứng dụng iOS của bạn
Nhưng, trong phần này, những gì tôi định giải thích là gửi email mà không hiển thị bảng soạn thư. gửi email trong nền. Đối với tính năng này, chúng tôi không thể sử dụng lớp MFMailComposer gốc của iOS vì nó không cho phép chúng tôi gửi email ở chế độ nền thay vì bật cửa sổ soạn thư từ nơi người dùng phải nhấn vào nút "gửi", vì vậy phần này tôi sẽ sử dụng Thư viện SKPSMTPMessage để gửi email ở chế độ nền, tuy nhiên tài khoản email phải được mã hóa cứng theo phương pháp này.
Hạn chế:
người gửi/nhận địa chỉ email đã được hardcoded hoặc bạn phải lấy nó sử dụng một số bật lên hình thức trong ứng dụng của bạn, nơi địa chỉ email người dùng đầu vào người gửi/nhận. Ngoài ra, thông tin đăng nhập tài khoản người gửi cũng phải được mã hóa cứng vì không có cách nào chúng tôi có thể lấy thông tin từ cài đặt thiết bị.
Phương pháp:
- nhập CFNetwork.framework để dự án của bạn.
- Bao gồm #import "SKPSMTPMessage.h" #import "NSData + Base64Additions.h" // để mã hóa Base64
- Bao gồm để ViewController bạn
- Tải SKPSMTPMessage thư viện từ
https://github.com/jetseven/skpsmtpmessage
Kéo và thả Thư mục "SMTPLibrary" bạn đã tải xuống dự án của mình.
Trước khi tiếp tục, hãy cho bạn biết rằng tôi đang sử dụng địa chỉ email người gửi/người nhận và mật khẩu người gửi được mã hóa cứng trong mã cho ví dụ này.Tuy nhiên, bạn có thể lấy thông tin đăng nhập này từ người dùng, cho phép họ nhập vào một số loại biểu mẫu (sử dụng UIViews).
-(void) sendEmailInBackground {
NSLog(@"Start Sending");
SKPSMTPMessage *emailMessage = [[SKPSMTPMessage alloc] init];
emailMessage.fromEmail = @"[email protected]"; //sender email address
emailMessage.toEmail = @"[email protected]"; //receiver email address
emailMessage.relayHost = @"smtp.gmail.com";
//emailMessage.ccEmail [email protected]"your cc address";
//emailMessage.bccEmail [email protected]"your bcc address";
emailMessage.requiresAuth = YES;
emailMessage.login = @"[email protected]"; //sender email address
emailMessage.pass = @"Passwxxxx"; //sender email password
emailMessage.subject [email protected]"@"email subject header message";
emailMessage.wantsSecure = YES;
emailMessage.delegate = self; // you must include <SKPSMTPMessageDelegate> to your class
NSString *messageBody = @"your email body message";
//for example : NSString *messageBody = [NSString stringWithFormat:@"Tour Name: %@\nName: %@\nEmail: %@\nContact No: %@\nAddress: %@\nNote: %@",selectedTour,nameField.text,emailField.text,foneField.text,addField.text,txtView.text];
// Now creating plain text email message
NSDictionary *plainMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, messageBody,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
emailMessage.parts = [NSArray arrayWithObjects:plainMsg,nil];
//in addition : Logic for attaching file with email message.
/*
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"JPG"];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSDictionary *fileMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r\n\tx- unix-mode=0644;\r\n\tname=\"filename.JPG\"",kSKPSMTPPartContentTypeKey,@"attachment;\r\n\tfilename=\"filename.JPG\"",kSKPSMTPPartContentDispositionKey,[fileData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
emailMessage.parts = [NSArray arrayWithObjects:plainMsg,fileMsg,nil]; //including plain msg and attached file msg
*/
[emailMessage send];
// sending email- will take little time to send so its better to use indicator with message showing sending...
}
Bây giờ, xử lý các phương pháp đại biểu:
// Mở thành công
-(void)messageSent:(SKPSMTPMessage *)message{
NSLog(@"delegate - message sent");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message sent." message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
}
// On Failure
-(void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{
// open an alert with just an OK button
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
NSLog(@"delegate - error(%d): %@", [error code], [error localizedDescription]);
}
Ok, đó là tất cả từ phía mã hóa . hy vọng hướng dẫn này có thể hữu ích cho bạn guyz
Bạn có thể vui lòng cung cấp thêm chi tiết về câu trả lời của bạn không? Có bất kỳ mẫu có sẵn về điều này? Tôi cũng đang đấu tranh trong việc gửi thư. Cảm ơn. – Gopinath
như tôi đã nói, không có sự đồng ý của người dùng, không có cách nào bạn có thể gửi email từ thiết bị iOS. bạn muốn gì khác –
Có, tôi đã hiểu. Cảm ơn. – Gopinath