diff --git a/FAQ.md b/FAQ.md index b27f2d09d0..8d8269b942 100644 --- a/FAQ.md +++ b/FAQ.md @@ -377,7 +377,8 @@ You might get the alert "*Please log in via your web browser*". This happens when Google considers the network that connects you to the internet (this could be a VPN) to to be unsafe. This can be prevented by using an app specific password. -See [here](https://support.google.com/mail/accounts/answer/78754) for troubleshooting. +See [here](https://support.google.com/mail/answer/7126229) for Google's instructions +and [here](https://support.google.com/mail/accounts/answer/78754) for troubleshooting. See [this FAQ](#user-content-faq111) about why OAuth is not being used. @@ -522,6 +523,8 @@ Searching messages is a pro feature. To use Outlook or Hotmail with two factor authentication enabled, you need to create an app password. See [here](https://support.microsoft.com/en-us/help/12409/microsoft-account-app-passwords-two-step-verification) for the details. +See [here](https://support.office.com/en-us/article/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040) for Microsoft's instructions. +
diff --git a/app/src/main/java/eu/faircode/email/EmailProvider.java b/app/src/main/java/eu/faircode/email/EmailProvider.java index d42bc99956..1ccbeabe19 100644 --- a/app/src/main/java/eu/faircode/email/EmailProvider.java +++ b/app/src/main/java/eu/faircode/email/EmailProvider.java @@ -55,10 +55,10 @@ import java.util.concurrent.Future; public class EmailProvider { public String name; - public int order; - public int keepalive; public String link; + public int order; public String type; + public int keepalive; public String imap_host; public boolean imap_starttls; public int imap_port; @@ -66,8 +66,7 @@ public class EmailProvider { public int smtp_port; public boolean smtp_starttls; public UserType user = UserType.EMAIL; - public String helpUrl = null; - public StringBuilder documentation = null; // html + public StringBuilder documentation; // html enum UserType {LOCAL, EMAIL} @@ -117,7 +116,6 @@ public class EmailProvider { throw new IllegalAccessException(name); } else if (eventType == XmlPullParser.END_TAG) { if ("provider".equals(xml.getName())) { - addSpecials(context, provider); result.add(provider); provider = null; } @@ -146,9 +144,11 @@ public class EmailProvider { } static EmailProvider fromDomain(Context context, String domain) throws IOException { - EmailProvider autoconfig = fromDomainInternal(context, domain); + EmailProvider autoconfig = _fromDomain(context, domain); - // Always prefer built-in profiles (ISPDB is not always correct) + // Always prefer built-in profiles + // - ISPDB is not always correct + // - documentation links List providers = loadProfiles(context); for (EmailProvider provider : providers) if (provider.imap_host.equals(autoconfig.imap_host) || @@ -160,23 +160,23 @@ public class EmailProvider { return autoconfig; } - private static EmailProvider fromDomainInternal(Context context, String domain) throws IOException { + private static EmailProvider _fromDomain(Context context, String domain) throws IOException { try { // Assume the provider knows best Log.i("Provider from DNS domain=" + domain); - return addSpecials(context, fromDNS(context, domain)); + return fromDNS(context, domain); } catch (Throwable ex) { Log.w(ex); try { // Check ISPDB Log.i("Provider from ISPDB domain=" + domain); - return addSpecials(context, fromISPDB(context, domain)); + return fromISPDB(context, domain); } catch (Throwable ex1) { Log.w(ex1); try { // Scan ports Log.i("Provider from template domain=" + domain); - return addSpecials(context, fromTemplate(context, domain)); + return fromTemplate(context, domain); } catch (Throwable ex2) { Log.w(ex2); throw new UnknownHostException(context.getString(R.string.title_setup_no_settings, domain)); @@ -501,20 +501,6 @@ public class EmailProvider { provider.documentation.append("").append(title).append(""); } - private static EmailProvider addSpecials(Context context, EmailProvider provider) { - if ("imap.gmail.com".equals(provider.imap_host)) - provider.helpUrl = Helper.FAQ_URI + "#user-content-faq6"; - - if (provider.imap_host.endsWith("office365.com") || - provider.imap_host.endsWith("live.com")) - provider.helpUrl = Helper.FAQ_URI + "#user-content-faq14"; - - if (provider.imap_host.endsWith("yahoo.com")) - provider.helpUrl = Helper.FAQ_URI + "#user-content-faq88"; - - return provider; - } - private static SRVRecord lookup(Context context, String record) throws TextParseException, UnknownHostException { Lookup lookup = new Lookup(record, Type.SRV); diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index 177dfcc105..d48e5c3b3a 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -1077,8 +1077,8 @@ public class FragmentAccount extends FragmentBase { tvError.setVisibility(View.VISIBLE); final EmailProvider provider = (EmailProvider) spProvider.getSelectedItem(); - if (provider != null && provider.helpUrl != null) { - Uri uri = Uri.parse(provider.helpUrl); + if (provider != null && provider.link != null) { + Uri uri = Uri.parse(provider.link); btnHelp.setTag(uri); btnHelp.setVisibility(View.VISIBLE); } @@ -1093,7 +1093,7 @@ public class FragmentAccount extends FragmentBase { public void run() { if (provider != null && provider.documentation != null) scroll.smoothScrollTo(0, tvInstructions.getBottom()); - else if (provider != null && provider.helpUrl != null) + else if (provider != null && provider.link != null) scroll.smoothScrollTo(0, btnHelp.getBottom()); else scroll.smoothScrollTo(0, tvError.getBottom()); diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index 79a12b87da..ff148759dc 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -769,8 +769,8 @@ public class FragmentIdentity extends FragmentBase { tvError.setVisibility(View.VISIBLE); final EmailProvider provider = (EmailProvider) spProvider.getSelectedItem(); - if (provider != null && provider.helpUrl != null) { - Uri uri = Uri.parse(provider.helpUrl); + if (provider != null && provider.link != null) { + Uri uri = Uri.parse(provider.link); btnHelp.setTag(uri); btnHelp.setVisibility(View.VISIBLE); } @@ -785,7 +785,7 @@ public class FragmentIdentity extends FragmentBase { public void run() { if (provider != null && provider.documentation != null) scroll.smoothScrollTo(0, tvInstructions.getBottom()); - else if (provider != null && provider.helpUrl != null) + else if (provider != null && provider.link != null) scroll.smoothScrollTo(0, btnHelp.getBottom()); else scroll.smoothScrollTo(0, tvError.getBottom()); diff --git a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java index d0e17fa691..9ff5772c76 100644 --- a/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentQuickSetup.java @@ -238,8 +238,8 @@ public class FragmentQuickSetup extends FragmentBase { String[] dparts = email.split("@"); EmailProvider provider = EmailProvider.fromDomain(context, dparts[1]); - if (provider.helpUrl != null) - args.putString("help", provider.helpUrl); + if (provider.link != null) + args.putString("link", provider.link); if (provider.documentation != null) args.putString("documentation", provider.documentation.toString()); @@ -442,8 +442,8 @@ public class FragmentQuickSetup extends FragmentBase { tvError.setVisibility(View.VISIBLE); } - if (args.containsKey("help")) { - Uri uri = Uri.parse(args.getString("help")); + if (args.containsKey("link")) { + Uri uri = Uri.parse(args.getString("link")); btnHelp.setTag(uri); btnHelp.setVisibility(View.VISIBLE); } @@ -458,7 +458,7 @@ public class FragmentQuickSetup extends FragmentBase { public void run() { if (args.containsKey("documentation")) scroll.smoothScrollTo(0, tvInstructions.getBottom()); - else if (args.containsKey("help")) + else if (args.containsKey("link")) scroll.smoothScrollTo(0, btnHelp.getBottom()); else if (tvError.getVisibility() == View.VISIBLE) scroll.smoothScrollTo(0, tvError.getBottom()); diff --git a/app/src/main/res/xml/providers.xml b/app/src/main/res/xml/providers.xml index fc53e40595..441fcd3ae8 100644 --- a/app/src/main/res/xml/providers.xml +++ b/app/src/main/res/xml/providers.xml @@ -2,7 +2,7 @@ + link="https://github.com/M66B/FairEmail/blob/master/FAQ.md#user-content-faq88">