2010-03-19 20 views
40

iPhone uygulamam ekte bir uygulama içi e-posta göndermek için MFMailComposeViewController sınıfını kullanıyor. Uygulama MFMailComposeViewController "canSendMail" yöntemi true (YES) döndürürse, uygulama yalnızca posta oluşturucu iletişim kutusunu görüntülemeye çalışır. Test kullanıcıları[MFMailComposeViewController canSendMail] ne zaman dönecektir

- (BOOL)canDeviceSendEmail 
{ 
    Class mailClass = (NSClassFromString(@"MFMailComposeViewController")); 
    return mailClass != nil && [mailClass canSendMail]; 
} 

Bir takım vardır: Aşağıdaki yöntem EVET dönerse Özellikle, aksi kullanıcı cihazda kurmak hiçbir e-posta hesap olmadığını belirten bir hata uyarısı iletişim belirten sunulur, posta besteci gösterir cihazda e-posta hesapları kurulduğunda bile bu hata uyarısı iletişimini aldıklarını bildirdi. Test cihazı, OS 3.1.3 ile bir iPhone 3G kullanmıştır. Bu nedenle, MFMailComposeViewController sınıfı var olmalı ve "canSendMail" yöntemi NO döndü olmalıdır.

Sorum şu: Bu cihazda hiçbir e-posta hesabı kurulmadığı durumda, "canSendMail" yöntemi başka hangi durumlarda HAYIR?

~ Teşekkür

cevap

69

aşağıdaki çağrı EVET dönmelidir:

[MFMailComposeViewController canSendMail] 

tüm hesaplar/kaldırıldı devre dışı bırakılırsa tersine, NO dönecektir.

0

Sen yöntem MFMailComposeViewController mevcut ve [MFMailComposeViewController canSendMail]NO dönen değil ayrımı olmadığından MFMailComposeViewController yaşamış olmalıdır emin olamaz.

Test ettiğiniz iPhone OS ile ilgili olmayanlar; Uygulamanızın bağlandığı iPhone SDK'nın hangi sürümü, MFMailComposeViewController'ın çalışma zamanında kullanılabilir olup olmadığını belirler. Bu sınıfı istiyorsanız, SDK 3.0 veya üstü ile oluşturmanız gerekir.

+0

Bunun için teşekkürler. Uygulama, temel SDK 3.1.2 ile oluşturuldu ve iPhone OS Dağıtım Hedefi, iPhone OS 3.0 – pythonquick

+0

Aha. IPhone OS Dağıtım Hedefini Temel SDK'dan ayrı olarak ayarlama ve sınıflar için çalışma zamanında kontrol etme tekniği benim için yeni. Oldukça havalı. – Tom

8

+canSendMail için YES varsayılan hesabının, e-postalarını göndermek için numaralı telefona ayarlanması gerekir.

+0

Ah, ilginç bir nokta. E-posta hesabından (giden) SMTP sunucusunu kaldırmayı denedim. E-posta oluşturucu penceresini açtı ve e-posta hesabın Giden Kutusu'nda kaldı, bu yüzden + [MFMailComposeViewController canSendMail] hala YES yaptı. Bunu geri göndermenin tek yolu, tüm e-posta hesaplarının devre dışı bırakılması veya tamamen kaldırılmasıydı. Bir hesabın e-posta gönderememesinin başka bir yolu var mı, bu yüzden canSendMail NO'yu döndürüyor mu? – pythonquick

0

Mesajlaşma Framework mi eklediniz (Dahili olarak, +[MFMailComposeViewController canSendMail]-isDefaultDeliveryAccount olmanın ilk posta hesabı buluyor., +[MailAccountProxy defaultMailAccountForDelivery] çağırır)? Bir kez benzer bir sorun yaşadım ve sadece XCode projesine doğru çerçeveyi eklemeyi unuttuğumdan kaynaklanıyordu. En az bir e-posta hesabı cihazda etkin ise

+0

Evet, MessageUI.framework dahil edilmiştir. Kendi test cihazımda e-posta gönderme işlemi, en az bir e-posta hesabı olduğu sürece etkindir. Bu nedenle MessageUI.framework doğru şekilde dahil edilmelidir. – pythonquick

3

Bu benim için çalıştı. Aygıt

hiçbir hesap görebilirsiniz İşte

Hesapları>, Takvim- ayarı-> Posta, Kişiler git şimdi hesap eklemek uygulamanıza geri dönüp onun dönen evet bu bulabilirsiniz added.Now olduğunu zaman ve e-posta gönderebilirsiniz. Üçüncü taraf uygulamalar posta göndermek için izin vermeyecek şekilde bir MDM profil yüklü ve yapılandırıldığında Teşekkür email hesabı, bir cihazda kurulum olmama ek olarak

4

, canSendMail da NO döndürür. Bu durumda, Mail.app uygulamasını başlatmak için mailto: URL ile openURL: URL'sini kullanmanız ve isteğe bağlı olarak, cc, bcc, konu ve beden alanını doldurmanız gerekir.

mailto: RFC - https://tools.ietf.org/html/rfc2368

1

iOS 10.1 durumunda, (Ayarlar'da) ilk iCloud'dan posta etkinleştirebilirsiniz. Ardından iCloud hesabınıza giriş yapın. Tüm değişiklikler ve e-postalar, bu değişikliklerden sonra simülatörünüzde mevcut olmalıdır. değişiklikle

i? true alabilirsiniz:

MFMailComposeViewController.canSendMail() 

Ben Swift 3. ile Xcode 8.1 kullanıyorum

0

Eğer herhangi bir posta hesabınız yoksa zaman [MFMailComposeViewController canSendMail] NO dönecektir cihazda. Bu durumda, posta uygulamasını aşağıdaki kodla açabilirsiniz:

- (void)openMailApp { 
    NSString *recipients = @"mailto:?cc=&subject="; 
    NSString *body = @"&body="; 
    NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body]; 
    email = [email stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]]; 
} 
İlgili konular