I have a landing page linked to an email and in the email there is a button. After the button is clicked I need to be able to connect to Salesforce and update a field in the Contact record.
Please advise how it can be achieved in Salesforce?
There are two scenarios are there -
When you're sending mail, send one id(probably some hash key matched up with time and recordId) as a part of URL parameter. I believe you just need to update one/two fields. Lets assume, isRead field you need to update(if single field, you can do it easily, if multiple pls add it in URL as a Get params[in case of sensitive data encode and encrypt it]).
For the first case/Internal users :
You can have a plain VF page/Lightning component with isUrlAddressable
implemented. There you can show some loading sign and on load in constructor you can update the record. Since you have recordId and data(if its present in URL parameter).
For the second case/non-Logged In Users
Create a site page(or public API, it still requires site). And do the same reading URL parameters and update the record.