如何正确使用emailintent? [复制]

Posted

技术标签:

【中文标题】如何正确使用emailintent? [复制]【英文标题】:How to use emailintent properly? [duplicate] 【发布时间】:2016-03-09 15:10:04 【问题描述】:

我试图让我的应用程序向电子邮件发送新密码,但它会打开一个页面并给出消息“没有应用程序可以执行此操作”,标题为“发送电子邮件”(我知道), 为什么?使用新密码的想法是我想要的,但首先我想将任何内容发送到编辑文本中键入的电子邮件以对其进行测试。我试过在真机上运行它。

public class Glemtpassword extends AppCompatActivity implements View.OnClickListener

Button nypassword;
EditText email;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_glemtpassword);
    nypassword = (Button) findViewById(R.id.nypassword);
    nypassword.setOnClickListener(this);
    email = (EditText) findViewById(R.id.email);


 @Override
public void onClick(View view) 
    if (view == nypassword)
        sendEmail();
    


protected void sendEmail() 
    Log.i("Send email", "");
    Intent emailIntent = new Intent(Intent.ACTION_SEND);

    emailIntent.putExtra(Intent.EXTRA_EMAIL, String.valueOf(email));

    try 
        startActivity(Intent.createChooser(emailIntent, "Send mail..."));
        finish();
        Log.i("Nyt password er sendt til din mail...", "");
    
    catch (android.content.ActivityNotFoundException ex) 
        Toast.makeText(Glemtpassword.this, "Ingen email klient", Toast.LENGTH_SHORT).show();
    


@Override
public boolean onCreateOptionsMenu(Menu menu) 

    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;


@Override
public boolean onOptionsItemSelected(MenuItem item) 
    int id = item.getItemId();
    if (id == R.id.Forside) 
        Intent intent = new Intent(this, Forside.class);
        startActivity(intent);
    
    else if (id == R.id.Logind)
        Intent intent = new Intent(this, LogInd.class);
        startActivity(intent);
    
    else if (id==R.id.Opretbruger) 
        Intent intent = new Intent(this, OpretBruger.class);
        startActivity(intent);
    
    return true;
 

编辑:

public class Glemtpassword extends AppCompatActivity implements View.OnClickListener

Button nypassword;
EditText email;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_glemtpassword);
    nypassword = (Button) findViewById(R.id.nypassword);
    nypassword.setOnClickListener(this);
    email = (EditText) findViewById(R.id.email);


 @Override
public void onClick(View view) 
    if (view == nypassword)
        sendEmail();
    


protected void sendEmail() 
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto", email.getText().toString(), null));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
    startActivity(Intent.createChooser(emailIntent, "Send email..."));


@Override
public boolean onCreateOptionsMenu(Menu menu) 

    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;


@Override
public boolean onOptionsItemSelected(MenuItem item) 
    int id = item.getItemId();
    if (id == R.id.Forside) 
        Intent intent = new Intent(this, Forside.class);
        startActivity(intent);
    
    else if (id == R.id.Logind)
        Intent intent = new Intent(this, LogInd.class);
        startActivity(intent);
    
    else if (id==R.id.Opretbruger) 
        Intent intent = new Intent(this, OpretBruger.class);
        startActivity(intent);
    
    return true;
 

【问题讨论】:

检查这个:***.com/a/2033124/4350275 【参考方案1】:

您没有设置 MIME 类型,也没有提供任何内容。调用putExtra() 以在Intent 上设置EXTRA_TEXT 的值,以及您希望在电子邮件正文中出现的任何内容。然后,在Intent 上调用setType() 以指示您在EXTRA_TEXT 中放置的数据的MIME 类型。

【讨论】:

已经编辑了我的代码,现在它让我有机会选择我想从哪个应用程序发送。我的问题是,它不能直接从应用程序发送吗?我想发送这条消息“123” @Hudhud:如果您使用ACTION_SENDACTION_SENDTO,用户可以选择他们的电子邮件客户端(因为可能有多个)并且用户可以选择不发送电子邮件。毕竟,它是用户的设备和用户的电子邮件帐户。欢迎您使用 JavaMail 等第三方库直接发送电子邮件。但是,您将需要一个电子邮件帐户及其密码。用户不想给你他们的电子邮件密码,使用你自己的意味着你的电子邮件帐户将被从应用程序中获取密码的人迅速接管。 好的,那么发送带有“123”信息的电子邮件最简单、最安全的方法是什么? @Hudhud:您已经通过ACTION_SEND/ACTION_SENDTO 实现了这一点。 好的,但正如我之前提到的,目前它使用我自己的 Outlook 帐户发送电子邮件。因此,如果我在编辑文本中写入 123@hotmail.com,它会打开我的 Outlook 并让我有机会发送到 123@hotmail.com,但我希望它自动从我的帐户发送消息“123”。【参考方案2】:

根据this answer

解决办法应该是:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
        "mailto","abc@gmail.com", null)); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body"); 
startActivity(Intent.createChooser(emailIntent, "Send email..."));

或如您可以使用的 Android 文档中所述:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);

【讨论】:

已上传我的代码的编辑版本。现在它要我打开一个应用程序,不能直接发送吗?

以上是关于如何正确使用emailintent? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个或多个文件附加到 Android 上的 SEND 操作

你能把多个extra_text's放在一个android emailIntent中吗

如何正确使用 Google Maps API? [复制]

以编程方式发送自动电子邮件[重复]

如何在 Typescript 中正确使用环境变量? [复制]

如何使用 JavaScript 正确检索当前年份值? [复制]