Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calendar invites: Administrator shall choose if server's or user's email adress is used #5080

Open
7 tasks
tuergeist opened this issue May 23, 2017 · 30 comments · May be fixed by #45383
Open
7 tasks

Calendar invites: Administrator shall choose if server's or user's email adress is used #5080

tuergeist opened this issue May 23, 2017 · 30 comments · May be fixed by #45383
Assignees
Labels
2. developing Work in progress enhancement feature: caldav Related to CalDAV internals feature: dav
Projects

Comments

@tuergeist
Copy link

tuergeist commented May 23, 2017

Feature Request

I refer to #2345 and #2778.

If a Nextcloud instance serves for users from different domains (which is the case at least for me), it's annoying that calendar invites are sent with the server's email address instead of the user's once. For me it would be fine if the server's address is taken if there is no user email configured.

To avoid problems with mailservers that might not accept sending emails for more than one domain, this behavior this could be made optional.
(In my case all domains are hosted and handled by one email server and one nextcloud server - I would not like to set up a nextcloud instance per domain).

(If someone is so nice and point me to the place where I can change it in the code myself, would be fine too)

Implementation

Delegate sending emails to apps. The main target is the Mail app but others may offer this integration too.

Work packages

  • Add a mail sending provider mechanism
  • Implement the mail sending provider for Mail
  • Add a setting for users to choose which email account should be used
  • Adjust CalDAV backend to use the providers and system email as fallback
  • Developer documentation for the new API
  • Admin documentation for the setup and any configuration options
  • User documentation for any user settings
@georgehrke
Copy link
Member

@tuergeist This is the place to go:
https://github.com/nextcloud/server/blob/master/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php#L109

Feel free to send a PR that implements this optionally. :)

@georgehrke
Copy link
Member

(Message provides a setFrom method, see https://github.com/nextcloud/server/blob/master/lib/private/Mail/Message.php#L81)

@tuergeist
Copy link
Author

Hi @georgehrke, IMHO the problem is the sender's address which I cannot change easily in neither code locations you pointed to. [Or I'm just too stupid]

@tuergeist
Copy link
Author

Aaahh. Got it.

@robertoschwald
Copy link

Any news on this?

@ntnsndr
Copy link

ntnsndr commented Jun 26, 2018

I'd add that this is an important issue for us at MayFirst.org, who use the same NextCloud across a great many domains and organizational identities. We really need these invitation emails to be coming from the users who send them. Thanks to all who have the capacity and willingness to work on this.

@nextcloud-bot nextcloud-bot added the stale Ticket or PR with no recent activity label Jul 27, 2018
@skjnldsv
Copy link
Member

@georgehrke 🎺 could you update this? :)

@skjnldsv skjnldsv added 0. Needs triage Pending check for reproducibility or if it fits our roadmap needs info and removed stale Ticket or PR with no recent activity labels Jun 12, 2019
@georgehrke georgehrke added 1. to develop Accepted and waiting to be taken care of and removed 0. Needs triage Pending check for reproducibility or if it fits our roadmap needs info labels Jun 12, 2019
@georgehrke
Copy link
Member

cc @jancborchardt This is what we talked about on Talk.

@georgehrke
Copy link
Member

to summarise the problem:

  • depending on the environment, users will have email-addresses managed by a different organisation than the Nextcloud-instance. If your Nextcloud is configured with the email address noreply@abc.tld, but your users use different providers like gmail, outlook, whatever, your email server (abc.tld) can't just start sending out emails for gmail, outlook, etc. Most of the times, these emails will be marked as spam and your server runs the risk of being put onto blacklists for spamming.

... and our options:

  • add an option for admins that allows them to send all emails (or at least emails from the same domain) via the abc.tld email server but with the real user email address. (user1@abc.tld). This should come with a big fat warning that if you enable it despite your users having email addresses from plenty different providers, you might run at the risk of being put onto spam blacklists
  • integrate even better with the mail app. Allow the mail app to hook into the IMipPlugin and send out emails if the currently logged in user has an account registered for the email of the Organizer given in the calendar data. If there is no email registered, fallback to the current behaviour. cc @ChristophWurst

@ChristophWurst
Copy link
Member

* integrate even better with the mail app. Allow the mail app to hook into the IMipPlugin and send out emails if the currently logged in user has an account registered for the email of the Organizer given in the calendar data. If there is no email registered, fallback to the current behaviour. cc @ChristophWurst

Sounds like a good idea in general.

@jancborchardt
Copy link
Member

Sounds good and seems we should do both options?

Everyone who commented in the thread: Would this solve your issue?

@gitterdoneplease
Copy link

gitterdoneplease commented Apr 21, 2020

I'm no dev, but you can get this done by editing nextcloudroot/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php

Change line 255 from:
->setFrom([$fromEMail => $fromName])
to:
->setFrom([$sender => $senderName])

And your invites will come from the email address of the user instead of the server.

@ChristophWurst
Copy link
Member

@gitterdoneplease this is a bit weird. I'm sure some mail servers will either not allow you to send a message with a mismatching from header or the recipient's mail server will mark it as spam as it looks like someone tries to spoof a sender.

@robertoschwald
Copy link

If all users use the same email domain, why should it be blocked?

@georgehrke
Copy link
Member

If all users use the same email domain,

This is something we can't assume. See my comment above:
#5080 (comment)

@gitterdoneplease
Copy link

Dunno gents. I run the mail server too so it’s not an issue for me. A big warning in the GUI should be enough, but this was necessary in my case to transition completely to NC. Spoofing a from header if you AUTH on a SMTP server is painless, but as pointed out may trigger spam/junk detectors.

@rullzer rullzer removed this from the Nextcloud 19 milestone May 7, 2020
@Findebug

This comment has been minimized.

@loibpet
Copy link

loibpet commented Sep 15, 2020

I am aware about quite a few organisations with different email domains. This easily happens with mergers, different legal entities for parts of a company (e.g. regulated business vs. un-regulated business, ...). There are tons of situations where this can happen.

Just don't assume that this is always fixed. Adding flexibility does not hurt at all and eases the work of the admins.

@Ferdi265
Copy link

Ferdi265 commented Nov 11, 2020

I also want to add that even if the mail server / domain is the same, the mail server will not necessarily allow you to send as some.user@my.tld with the credentials for the nextcloud notification mail (often something like nextcloud@my.tld).

Also, since normal non-admin users can usually add and change mail settings via the nextcloud mail app, whether overriding the From header with the notification mail server and credentials will work can even change easily just through a settings change by an unprivileged user!

So I would suggest:

  • have a global check box in the admin panel:
    • Allow sending Calendar Invitations from user mail addresses configured in the Mail app
  • have a check box in the Mail app account settings (maybe disable / grey out this option if the global setting is disabled)
    • Allow NextCloud to send Calendar Invititations from this address

and send out calendar invitations from the user mail address (using the user mail credentials!) only if both settings are enabled.

@ChristophWurst ChristophWurst added the feature: caldav Related to CalDAV internals label Dec 17, 2021
@JMoVS
Copy link

JMoVS commented Dec 8, 2022

@ChristophWurst Has there been any progress on this? In my case, it seems that the emails sent by the server itself have a higher chance of ending in spam than the users' email addresses sending.

@gitterdoneplease
Copy link

@ChristophWurst Has there been any progress on this? In my case, it seems that the emails sent by the server itself have a higher chance of ending in spam than the users' email addresses sending.

I've been modifying the code for all of the versions since my first post to make this work. Would be great to have individual email addresses send calendar invites the way other systems work.

@MaLiPi10
Copy link

MaLiPi10 commented Jan 1, 2023

I also have a requirement and would be happy to help with this. At least a mail server with two domains. More could be added. Postfix + Dovecot + MySQL + Spamasassin + ClamAV.

Also need synchronizations and sending invitations to calendars on smartphones.

@gitterdoneplease
Copy link

Hi all, with SPF and DKIM records set correctly this really all works painlessly now except for manually changing the code. Could we please get something in the UI? It would be really great. Thanks so much.

@keunes
Copy link

keunes commented Sep 3, 2023

with SPF and DKIM records set correctly this really all works painlessly now

Is there some guide that you followed?

@gitterdoneplease
Copy link

How to set DNS records correctly? There is a lot of help out there, but I’d look at MxToolBox.

@gitterdoneplease
Copy link

gitterdoneplease commented Sep 25, 2023

Every new version I come back here to find what needs to be changed again. It's still in nextcloudroot/apps/dav/lib/CalDAV/Schedule/IMipPlugin.php, but now the line number is 244.

Change line 244 from:
->setFrom([$fromEMail => $fromName]);
to:
->setFrom([$sender => $senderName]);

@komoricodrutz
Copy link

komoricodrutz commented Oct 9, 2023

Hi all,
Yes, such a feature (selectable option from admin account) would indeed be beneficial. All calendar-related applications I've worked with do send the invitation from the user's logged in account.

And perhaps another small issue no-one seems to have noticed. At least not yet. When you send the appointment, it does not show up in the sent items mail folder. Neither in my user account's mailbox, nor in the admin account's mailbox (after I modified the setting as described in the comment above). Which can be a nuisance. Consider this scenario:
If it doesn't show up in Sent Items, how am I to be sure that the invitation has actually been sent?
Or how can I prove to my boss that I sent the appointment when I say I sent it?
In addition, it doesn't always send the invites out. If your recipient has a nextcloud account on your own server and is registered with his private e-mail address, it seems that it doesnt' even send an e-mail. I performed these tests:
I created an appointment with a friend's account, who has an account on my nextcloud and the registered e-mail address someone@gmail.com and my user account is someoneelse@gmail.com. someone@gmail.com never got the invite via e-mail. However, it arrived straight into his nextcloud calendar. And nothing in sent items. Then I only used just his someone@gmail.com address and again, he didn't receive the invite by mail. When I used his work e-mail address (someone@somethingelse.com), he finally received it. Yet still nothing in any profile sent items mailbox.

These "features" should not even be considered feature requests. They should simply be matching all the other similar solutions on the market. Out of the box.

LE, after performing some additional tests:
It also appears that the solution from @gitterdoneplease
Change line 244 from:
->setFrom([$fromEMail => $fromName]);
to:
->setFrom([$sender => $senderName]);
doesn't seem to work sufficiently.
It only appears to modify the sender's displayname:
I even rebooted the server after making this change and he is still receiving the appointment from the admin account's e-mail address (yahoo), albeit with my account's display name shown in the from field instead of the admin account's display name.
May be related to the entry
$fromEMail = Util::getDefaultEmailAddress('invitations-noreply');
I am fearful, however, to change this, as I am not versed at all in php. So maybe someone else can give me a tip in this context?
@gitterdoneplease - pls elp? :-)

Currently tested on Nextcloud 25.0.12.
Will test it soon on the latest version instance I have (27.1.2). If I don't post additional details, you can assume that the behaviour is the same.

My suggestion would be that if the currently logged in user has one or more e-mail account(s) configured in the "Mail" client interface, nextcloud should by default use the account configured as default in the mail client.
The admin account should be left as a fallback solution, if the currently logged in user does not have an e-mail account configured in the mail client.

@keunes
Copy link

keunes commented Oct 9, 2023

Hi @komoricodrutz

If your recipient has a nextcloud account on your own server and is registered with his private e-mail address, it seems that it doesnt' even send an e-mail. I performed these tests:

I think that'd deserve its own, dedicated issue. That'd probably more considered a bug than an enhancement/feature request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2. developing Work in progress enhancement feature: caldav Related to CalDAV internals feature: dav
Projects
Status: 🏗️ In progress
CalDAV 18
  
To do
Development

Successfully merging a pull request may close this issue.