2011-08-17 33 views
10

Tôi đã tìm kiếm một khung để chỉ cho phép tôi gửi email từ bên trong ứng dụng của mình. Tôi đã thử MailCore, Pantomime và SKPSMTP tất cả không có may mắn. Tôi không thể làm cho họ biên dịch trong Xcode, vì vậy tôi cho rằng họ đã lỗi thời. Có cách nào tôi có thể làm điều này? Nếu vậy, làm thế nào? Cảm ơn.Xcode 4/iOS - Gửi email bằng SMTP từ bên trong ứng dụng của tôi

+0

Có một cách để bật lên một hộp email mới trong ứng dụng của bạn với nội dung của bạn, nhưng người dùng kiểm soát có gửi hay không. Tôi không chắc chắn thực hiện SMTP của riêng bạn bên trong một ứng dụng sẽ được phê duyệt bởi táo. – Dani

+0

Có thể không, nhưng có rất nhiều ứng dụng hiện có mà thực hiện điều này không có? Bối cảnh trong đó đây là, là một hình thức đặt phòng cho một khách sạn. Vì vậy, nếu tôi thêm một nút gửi, và táo thấy tôi không làm bất cứ điều gì khó chịu, tôi không thể thấy bất kỳ lý do nó sẽ bị từ chối. Trừ khi tôi bỏ lỡ một cái gì đó trong các hướng dẫn. Cảm ơn cho đầu vào của bạn mặc dù. –

+0

Tôi đã biên dịch mã SKPSMTP thành công. Hãy thử thêm các tệp .m một cách rõ ràng vào các Giai đoạn Xây dựng/Biên dịch Nguồn. – Ellis

Trả lời

18

Bạn có thể dễ dàng gửi email từ thiết bị iOS của mình. Không cần phải thực hiện SMTP và tất cả. Điều tốt nhất về việc sử dụng các cơ sở gửi email sẵn có trong iOS là nó cho phép bạn truy cập vào sổ địa chỉ! Vì vậy, nó tự động hoàn thành tên, địa chỉ email. Yaaiiii !!

Bao gồm, AddressBook, AddressBookUIMessageUI khuôn khổ và mã giống như thế này. Lưu ý bạn thậm chí có thể chọn gửi nội dung dưới dạng HTML!

#import <MessageUI/MessageUI.h> 
#import <AddressBook/AddressBook.h> 
#import <AddressBookUI/AddressBookUI.h> 

MFMailComposeViewController *mailComposer; 
mailComposer = [[MFMailComposeViewController alloc] init]; 
mailComposer.mailComposeDelegate = self; 
[mailComposer setModalPresentationStyle:UIModalPresentationFormSheet]; 
[mailComposer setSubject:@"your custom subject"]; 
[mailComposer setMessageBody:@"your custom body content" isHTML:NO]; 
[self presentModalViewController:mailComposer animated:YES]; 
[mailComposer release]; 

Vì lợi ích của sự hoàn chỉnh, tôi phải viết chọn này để loại bỏ cửa sổ email nếu người dùng nhấn cancel hoặc send -

- (void)mailComposeController:(MFMailComposeViewController*)controller 
      didFinishWithResult:(MFMailComposeResult)result 
         error:(NSError*)error 
{ 
    if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]); 
    [self dismissModalViewControllerAnimated:YES]; 
    return; 
} 

Chúc mừng mã hóa ...

+0

Cảm ơn phản hồi chi tiết và hài hước của bạn! :) Điều này sẽ mang màn hình thư từ dưới lên, hoặc gửi nó âm thầm trong nền? Bởi vì tôi đang nhắm đến cái sau. –

1

tôi sẽ hãy tưởng tượng cách thức được Apple chấp thuận để thực hiện điều này sẽ là gửi dữ liệu đến máy chủ qua HTTP Post và để máy chủ tạo thư cho bạn. Tôi đã nhìn thấy những người khác đặt câu hỏi tương tự cho câu hỏi này, và câu trả lời là nếu bạn gửi nó từ thiết bị, bạn thực sự cần phải nhắc người dùng.

Tôi thậm chí có thể cho bạn biết lý do tại sao: Hãy tưởng tượng một ứng dụng có thể tự gửi cho mọi người trong sổ địa chỉ của bạn mà không cần xác nhận của bạn, nói với họ rằng bạn vừa cài đặt ứng dụng X và cũng nên như vậy. Ngay cả khi có ý định tốt, điều này có thể nhanh chóng tạo ra một cơn bão SMTP khổng lồ, và về cơ bản đây sẽ là virus "Tôi yêu bạn".

Đó là đủ căng thẳng trên internet công cộng, nhưng trên mạng di động không dây, có thể nhanh chóng gây quá tải đủ để chặn dịch vụ cel.

Kết luận: Hoặc sử dụng ComposeViewController như @Srikar đề xuất hoặc gửi dữ liệu khác đến máy chủ của bạn và gửi dữ liệu đó từ đó.

+0

Tôi hiểu điều đó, nhưng nếu tôi không sử dụng quả táo được xây dựng trong các khung công tác, thì tôi sẽ không cần truy cập vào sổ địa chỉ. Chỉ một từ email và một email. Nhưng nếu điều này là không thể, tôi sẽ phải yêu cầu người dùng điền vào biểu mẫu và email được tạo cho họ chỉ để nhấn gửi. –

4

SKPSMTPMessage vẫn hoạt động tốt để gửi email mà không cần giao diện người dùng .

Đảm bảo bạn thêm tham chiếu vào CFNetwork.framework trong dự án của mình. Nếu không, bạn sẽ gặp lỗi xây dựng.

+3

Tôi đã sử dụng 'SKPSMTPMessage' này. Nhưng nó cần phải mã hóa tên người dùng và mật khẩu. Nhưng tôi muốn gửi email bằng cách sử dụng tài khoản email đã đăng nhập trong iPhone. Làm thế nào tôi có thể làm điều đó – iDia

6

Cần lưu ý rằng MFMailComposeViewController có phương pháp được gọi là canSendMail. Nếu bạn không kiểm tra điều này trước khi trình bày MFMailComposeViewController trên thiết bị không có tài khoản email, bạn sẽ nhận được SIGABRT.

Thật dễ dàng để bỏ lỡ điều này khi thử nghiệm trên thiết bị hoặc trình mô phỏng vì có thể bạn sẽ có tài khoản email trên máy Mac và iPad của mình.

Các vấn đề liên quan