【问题标题】:Access Office356 shared mailbox with PHP用PHP访问Office356共享邮箱
【发布时间】:2015-02-12 15:12:45
【问题描述】:

我正在编写一个 PHP 脚本来读取和解析发送到共享邮箱的错误日志。

我正在使用 imap_open() 进行连接。

如果我使用以下凭据连接到我自己的邮箱,它可以正常工作

server: {outlook.office365.com:993/imap/ssl}
username: myname@domain.com
password: mypas$word

但是,如果我想使用以下凭据连接到 sared 邮箱,则会收到错误消息

server: {outlook.office365.com:993/imap/ssl}
username: myname@domain.com\shared-folder@domain.com
password: mypas$word

错误如下:User is authenticated but not connected. (errflg=2)

根据我的研究,这意味着我使用了错误的密码,但由于它在连接到我自己的收件箱时有效,所以不会错

我 100% 确定我的帐户可以访问共享邮箱,我可以通过 Office 365 网络界面通过我的帐户访问它

更多细节:我的密码包含一个 $ 符号,但这无关紧要。我在密码上使用了单引号并且转义 $ 符号没有帮助,即使是我的个人邮箱也会导致登录失败。

【问题讨论】:

  • 那么到目前为止你做了什么?
  • 这不是真正的编码问题,而是解释微软的错误代码。
  • 是的,密码很重要,如果您使用的是imap_open(...., "mypas$word")。那将是文字字符串 mypas 和变量 $word 中存在的任何(可能为 null)值。
  • 当我连接到我自己的邮箱时,我可以列出所有的邮件,如果我想删除它们。当我想要共享文件夹时,我没有比连接尝试失败更进一步
  • 我使用单引号作为密码。转义 $ 无济于事。密码适用于我自己的邮箱这一事实让我相信密码不是问题。

标签: php imap


【解决方案1】:

另一个对我们有用的解决方案是使用适当的标志将用户名数据添加到邮箱参数。

例如,用 Office 365 配置

USER EMAIL: user@maindomain.com
PASSWORD: password
SHARED MAILBOX: shared@anotherdomain.com

那么 imap_open 调用将是

imap_open("{outlook.office365.com:993/imap/ssl/authuser=user@maindomain.com/user=shared@anotherdomain.com}", "user@maindomain.com", "password");

注意使用 /authuser 标志包含主要用户电子邮件,使用 /user 标志包含共享邮箱。

当上一个答案中的邮箱别名方法不成功时,这对我们有用。

【讨论】:

  • 谢谢,但这对我不起作用。我认为这只适用于某些服务器配置。我得到:Can't do /authuser with this server
  • 服务器肯定有一些特定的东西。仅供参考,这是连接到 Office 365 商业(企业)帐户。我尝试了在互联网上可以找到或想到的所有其他方法,这是唯一适用于这种特殊情况的方法。 php imap 和 exchange/O365 的组合有些东西不能很好地结合在一起:(
  • 为我工作,但我使用收件箱后缀作为服务器地址{outlook.office365.com:993/imap/ssl/authuser=fulluser@email.com/user=fullshared@mail.com}INBOX
  • 也为我工作,但在添加字符集“US-ASCII”之后,将 imap_search 与 office365 一起使用
【解决方案2】:

尝试使用帐户别名

%USERUPN%/%SHAREDALIAS% 例如:-

user@domain.com/sharedbox 其中“sharedbox”是共享邮箱的别名,而不是完整的电子邮件地址

我看到一些人使用正斜杠 (/) 和一些人使用反斜杠 (\) 的不同报告


编辑

您是否使用邮箱别名?不要使用 sharedbox@shareddomain.com

交换配置:

  USER EMAIL: user@maindomain.com
  PASSWORD: password



 SHARED MAILBOX: shared@anotherdomain.com      (could also be @domain.com, of course)
  SHARED MAILBOX ALIAS: shared-mailbox

注意:请确保始终使用邮箱创建唯一别名,因为它会创建用户 [alias]@maindomain.com。在这种情况下 shared-mailbox@maindomain.com

IMAP 配置设置:

  EMAIL ADDRESS: shared@anotherdomain.com (shared mailbox)
  IMAP SERVER: outlook.office365.com
  SMTP SERVER: smtp.office365.com
  USERNAME: user@maindomain.com\shared-mailbox  (user\shared mailbox alias)
  PASSWORD: password (user's password)

【讨论】:

  • 谢谢,但这导致了imap_open(): Couldn't open stream {outlook.office365.com:993/imap/ssl}。将 \ 更改为 / 似乎没有什么不同。
  • 我无权访问配置,因此我联系了可以访问的人。我不确定是否配置了别名。
  • 别名当前与收件箱的名称相同,这不起作用。我已要求将别名更改为不同的名称
  • 我们终于通过将array('DISABLE_AUTHENTICATOR' => 'PLAIN') 添加到imap_open 字符串来实现这一点。我们还必须创建一个新的共享邮箱,第一个配置有问题,我们无法让它在那里工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2022-08-20
  • 2018-11-20
  • 2010-09-24
相关资源
最近更新 更多